base_prefix)) { $_prefix = $wpdb->base_prefix; } else { $_prefix = $wpdb->prefix; } $options = $this->options; $searchData = $this->searchData; $kw_logic = w_isset_def($searchData['keyword_logic'], 'or'); $q_config['language'] = $options['qtranslate_lang']; $s = $this->s; // full keyword $_s = $this->_s; // array of keywords if ($kw_logic == 'orex') $_si = "[[:<:]]" . implode('[[:>:]]|[[:<:]]', $_s) . "[[:>:]]"; // imploded exact phrase for regexp else $_si = implode('|', $_s); // imploded phrase for regexp if ($kw_logic == 'andex') { $l_sign = ''; $r_sign = ''; } else { $l_sign = '%'; $r_sign = '%'; } $_si = $_si != '' ? $_si : $s; $repliesresults = array(); $userresults = array(); $groupresults = array(); $activityresults = array(); if (function_exists('bp_core_get_user_domain')) { $parts = array(); $relevance_parts = array(); /*----------------------- User query ---------------------------*/ if ($searchData['search_in_bp_users']) { $words = $options['set_exactonly'] == 1 ? $s : $_si; if ($kw_logic == 'or' || $kw_logic == 'orex') { $parts[] = "(lower($wpdb->users.display_name) REGEXP '$words')"; } else { if (count($_s) > 0) $and_like = implode("$r_sign' AND lower($wpdb->users.display_name) LIKE '$l_sign", $_s); else $and_like = $s; $parts[] = "lower($wpdb->users.display_name) LIKE '$l_sign" . $and_like . "$r_sign'"; } $relevance_parts[] = "(case when (lower($wpdb->users.display_name) REGEXP '$words') then $searchData[titleweight] else 0 end)"; $relevance_parts[] = "(case when (lower($wpdb->users.display_name) REGEXP '$s') then $searchData[etitleweight] else 0 end)"; // The first word relevance is higher if (count($_s) > 0) $relevance_parts[] = "(case when (lower($wpdb->users.display_name) REGEXP '" . $_s[0] . "') then $searchData[etitleweight] else 0 end)"; /*------------------------- Build like --------------------------*/ $like_query = implode(' OR ', $parts); if ($like_query == "") $like_query = "(1)"; else { $like_query = "($like_query)"; } /*---------------------------------------------------------------*/ /*---------------------- Build relevance ------------------------*/ $relevance = implode(' + ', $relevance_parts); if ($searchData['userelevance'] != 1 || $relevance == "") $relevance = "(1)"; else { $relevance = "($relevance)"; } /*---------------------------------------------------------------*/ $querystr = " SELECT $wpdb->users.ID as id, $wpdb->users.display_name as title, '' as date, '' as author, $relevance as relevance FROM $wpdb->users WHERE $like_query ORDER BY relevance DESC, title ASC "; //var_dump($querystr);die(); $userresults = $wpdb->get_results($querystr, OBJECT); foreach ($userresults as $k => $v) { $userresults[$k]->link = bp_core_get_user_domain($v->id); if ($searchData['image_options']['show_images'] == 1) { $im = bp_core_fetch_avatar(array('item_id' => $userresults[$k]->id, 'html' => false)); if ($im != '') { $userresults[$k]->image = $im; } } $update = get_user_meta($v->id, 'bp_latest_update', true); if (is_array($update) && isset($update['content'])) $userresults[$k]->content = $update['content']; if ($userresults[$k]->content != '') { $userresults[$k]->content = wd_substr_at_word(strip_tags($userresults[$k]->content), $searchData['descriptionlength']) . "..."; } else { $userresults[$k]->content = ""; } } } /*---------------------------------------------------------------*/ /*----------------------- Groups query --------------------------*/ if ($searchData['search_in_bp_groups'] && bp_is_active('groups')) { $parts = array(); $relevance_parts = array(); /*------------------------- Statuses ----------------------------*/ $statuses = array(); if ($searchData['search_in_bp_groups_public'] == 1) $statuses[] = 'public'; if ($searchData['search_in_bp_groups_private'] == 1) $statuses[] = 'private'; if ($searchData['search_in_bp_groups_hidden'] == 1) $statuses[] = 'hidden'; if (count($statuses) < 1) return ''; $words = implode('|', $statuses); $group_statuses = "(lower(" . $wpdb->prefix . "bp_groups.status) REGEXP '$words')"; /*---------------------------------------------------------------*/ /*------------------------- Title query -------------------------*/ $words = $options['set_exactonly'] == 1 ? $s : $_si; if ($kw_logic == 'or' || $kw_logic == 'orex') { $parts[] = "(lower(" . $wpdb->prefix . "bp_groups.name) REGEXP '$words')"; } else { if (count($_s) > 0) $and_like = implode("$r_sign' AND lower(" . $wpdb->prefix . "bp_groups.name) LIKE '$l_sign", $_s); else $and_like = $s; $parts[] = "lower(" . $wpdb->prefix . "bp_groups.name) LIKE '$l_sign" . $and_like . "$r_sign'"; } $relevance_parts[] = "(case when (lower(" . $wpdb->prefix . "bp_groups.name) REGEXP '$words') then $searchData[titleweight] else 0 end)"; $relevance_parts[] = "(case when (lower(" . $wpdb->prefix . "bp_groups.name) REGEXP '$s') then $searchData[etitleweight] else 0 end)"; // The first word relevance is higher if (count($_s) > 0) $relevance_parts[] = "(case when (lower(" . $wpdb->prefix . "bp_groups.name) REGEXP '" . $_s[0] . "') then $searchData[etitleweight] else 0 end)"; /*---------------------------------------------------------------*/ /*---------------------- Description query ----------------------*/ if ($kw_logic == 'or' || $kw_logic == 'orex') { $parts[] = "(lower(" . $wpdb->prefix . "bp_groups.description) REGEXP '$words')"; } else { if (count($_s) > 0) $and_like = implode("$r_sign' AND lower(" . $wpdb->prefix . "bp_groups.description) LIKE '$l_sign", $_s); else $and_like = $s; $parts[] = "lower(" . $wpdb->prefix . "bp_groups.description) LIKE '$l_sign" . $and_like . "$r_sign'"; } $relevance_parts[] = "(case when (lower(" . $wpdb->prefix . "bp_groups.description) REGEXP '$words') then $searchData[contentweight] else 0 end)"; $relevance_parts[] = "(case when (lower(" . $wpdb->prefix . "bp_groups.description) REGEXP '$s') then $searchData[econtentweight] else 0 end)"; /*---------------------------------------------------------------*/ /*------------------------- Build like --------------------------*/ $like_query = implode(' OR ', $parts); if ($like_query == "") $like_query = "(1)"; else { $like_query = "($like_query)"; } /*---------------------------------------------------------------*/ /*---------------------- Build relevance ------------------------*/ $relevance = implode(' + ', $relevance_parts); if ($searchData['userelevance'] != 1 || $relevance == "") $relevance = "(1)"; else { $relevance = "($relevance)"; } /*---------------------------------------------------------------*/ $querystr = " SELECT " . $wpdb->prefix . "bp_groups.id as id, " . $wpdb->prefix . "bp_groups.name as title, " . $wpdb->prefix . "bp_groups.description as content, " . $wpdb->prefix . "bp_groups.date_created as date, $wpdb->users.user_nicename as author, $relevance as relevance FROM " . $wpdb->prefix . "bp_groups LEFT JOIN $wpdb->users ON $wpdb->users.ID = " . $wpdb->prefix . "bp_groups.creator_id WHERE $group_statuses AND $like_query ORDER BY relevance DESC, title ASC"; var_dump($querystr); $groupresults = $wpdb->get_results($querystr, OBJECT); foreach ($groupresults as $k => $v) { $group = new BP_Groups_Group($v->id); $groupresults[$k]->link = bp_get_group_permalink($group); if ($searchData['image_options']['show_images'] == 1) { $avatar_options = array('item_id' => $v->id, 'object' => 'group', 'type' => 'full', 'html' => false); $im = bp_core_fetch_avatar($avatar_options); if ($im != '') { $groupresults[$k]->image = $im; } } if ($groupresults[$k]->content != '') $groupresults[$k]->content = wd_substr_at_word(strip_tags($groupresults[$k]->content), $searchData['descriptionlength']) . "..."; } } /*---------------------------------------------------------------*/ /*----------------------- Activity query ------------------------*/ if ($searchData['search_in_bp_activities'] && bp_is_active('groups')) { $parts = array(); $relevance_parts = array(); /*---------------------- Description query ----------------------*/ $words = $options['set_exactonly'] == 1 ? $s : $_si; if ($kw_logic == 'or' || $kw_logic == 'orex') { $parts[] = "(lower(" . $wpdb->prefix . "bp_activity.content) REGEXP '$words')"; } else { if (count($_s) > 0) $and_like = implode("$r_sign' AND lower(" . $wpdb->prefix . "bp_activity.content) LIKE '$l_sign", $_s); else $and_like = $s; $parts[] = "lower(" . $wpdb->prefix . "bp_activity.content) LIKE '$l_sign" . $and_like . "$r_sign'"; } $relevance_parts[] = "(case when (lower(" . $wpdb->prefix . "bp_activity.content) REGEXP '$words') then $searchData[contentweight] else 0 end)"; $relevance_parts[] = "(case when (lower(" . $wpdb->prefix . "bp_activity.content) REGEXP '$s') then $searchData[econtentweight] else 0 end)"; /*---------------------------------------------------------------*/ /*------------------------- Build like --------------------------*/ $like_query = implode(' OR ', $parts); if ($like_query == "") $like_query = "(1)"; else { $like_query = "($like_query)"; } /*---------------------------------------------------------------*/ /*---------------------- Build relevance ------------------------*/ $relevance = implode(' + ', $relevance_parts); if ($searchData['userelevance'] != 1 || $relevance == "") $relevance = "(1)"; else { $relevance = "($relevance)"; } /*---------------------------------------------------------------*/ $querystr = " SELECT " . $wpdb->prefix . "bp_activity.id as id, " . $wpdb->prefix . "bp_activity.content as title, " . $wpdb->prefix . "bp_activity.content as content, " . $wpdb->prefix . "bp_activity.date_recorded as date, $wpdb->users.user_nicename as author, " . $wpdb->prefix . "bp_activity.user_id as author_id, $relevance as relevance FROM " . $wpdb->prefix . "bp_activity LEFT JOIN $wpdb->users ON $wpdb->users.ID = " . $wpdb->prefix . "bp_activity.user_id WHERE (" . $wpdb->prefix . "bp_activity.component = 'activity' AND " . $wpdb->prefix . "bp_activity.is_spam = 0) AND $like_query ORDER BY relevance DESC, title ASC"; $activityresults = $wpdb->get_results($querystr, OBJECT); foreach ($activityresults as $k => $v) { $activityresults[$k]->link = bp_activity_get_permalink($v->id); $activityresults[$k]->image = bp_core_fetch_avatar(array('item_id' => $v->author_id, 'html' => false)); } } do_action('bbpress_init'); } $this->results = array( 'repliesresults' => $repliesresults, 'groupresults' => $groupresults, 'userresults' => $userresults, 'activityresults' => $activityresults ); return $this->results; } } } ?>