/**
 * Filters the bp_has_members() query to return only users who have unlocked the specific Achievement.
 *
 * @global object $bp BuddyPress global settings
 * @global nxtdb $nxtdb NXTClass database object
 * @since 2.0
 */
function dpa_filter_users_by_achievement($query, $sql_parts)
{
    global $bp, $nxtdb;
    // Hacktastic. To override filter text on pagination. See bp_members_pagination_count().
    $find = __('Viewing member %1$s to %2$s (of %3$s active members)', 'buddypress');
    // Intentionally uses BuddyPress' text domain.
    $replace = __('Viewing member %1$s to %2$s (of %3$s members) who have unlocked this Achievement', 'dpa');
    dpa_override_i18n($find, $replace);
    if ($bp->achievements->current_achievement->id) {
        // This function is hooked into both bp_core_get_total_users_sql and bp_core_get_paged_users_sql, modify the query appropiately.
        if (isset($sql_parts['select_main'])) {
            $sql_parts['select_main'] .= ', unlocked.achieved_at';
        }
        $sql_parts['where'] = ", {$bp->achievements->table_unlocked} as unlocked {$sql_parts['where']}" . $nxtdb->prepare(' AND unlocked.achievement_id = %d AND unlocked.user_id = u.ID', $bp->achievements->current_achievement->id);
        if ("ORDER BY um.meta_value DESC" == $sql_parts[0] || "ORDER BY u.user_registered DESC" == $sql_parts[0] || "ORDER BY pd.value ASC" == $sql_parts[0] || "ORDER BY rand()" == $sql_parts[0] || "ORDER BY CONVERT(um.meta_value, SIGNED) DESC" == $sql_parts[0]) {
            $sql_parts[0] = "ORDER BY unlocked.achieved_at DESC";
        }
    }
    // Remove the filters that invoke this function so it doesn't affect other usages of the members loop on the same page
    if (isset($sql_parts['select_main'])) {
        remove_filter('bp_core_get_paged_users_sql', 'dpa_filter_users_by_achievement', 10, 2);
    } else {
        remove_filter('bp_core_get_total_users_sql', 'dpa_filter_users_by_achievement', 10, 2);
    }
    // Switch back the translation
    $find = __('Viewing member %1$s to %2$s (of %3$s members) who have unlocked this Achievement', 'dpa');
    $replace = __('Viewing member %1$s to %2$s (of %3$s active members)', 'buddypress');
    // Intentionally uses BuddyPress' text domain.
    dpa_override_i18n($find, $replace);
    return apply_filters('dpa_filter_users_by_achievement', join(' ', (array) $sql_parts), $sql_parts);
}
Exemplo n.º 2
0
/**
 * Changes the 'no activity' message on an achievement's activity page.
 *
 * @since 2.0
 */
function dpa_achievement_activity_il8n_filter()
{
    $find = __('Sorry, there was no activity found. Please try a different filter.', 'buddypress');
    // Intentionally uses BuddyPress' text domain.
    $replace = __('Sorry, there was no activity found.', 'dpa');
    dpa_override_i18n($find, $replace);
}