/**
 * Sends emails and BP notifications for users @-mentioned in an activity item.
 *
 * @since 1.7.0
 *
 * @uses bp_activity_at_message_notification()
 * @uses bp_activity_update_mention_count_for_user()
 *
 * @param BP_Activity_Activity $activity The BP_Activity_Activity object.
 */
function bp_activity_at_name_send_emails($activity)
{
    // Are mentions disabled?
    if (!bp_activity_do_mentions()) {
        return;
    }
    // If our temporary variable doesn't exist, stop now.
    if (empty(buddypress()->activity->mentioned_users)) {
        return;
    }
    // Grab our temporary variable from bp_activity_at_name_filter_updates().
    $usernames = buddypress()->activity->mentioned_users;
    // Get rid of temporary variable.
    unset(buddypress()->activity->mentioned_users);
    // Send @mentions and setup BP notifications.
    foreach ((array) $usernames as $user_id => $username) {
        /**
         * Filters BuddyPress' ability to send email notifications for @mentions.
         *
         * @since 1.6.0
         *
         * @param bool  $value     Whether or not BuddyPress should send a notification to the mentioned users.
         * @param array $usernames Array of users potentially notified.
         */
        if (apply_filters('bp_activity_at_name_do_notifications', true, $usernames)) {
            bp_activity_at_message_notification($activity->id, $user_id);
        }
        // Updates mention count for the user.
        bp_activity_update_mention_count_for_user($user_id, $activity->id);
    }
}
/**
 * Sends emails and BP notifications for users @-mentioned in an activity item.
 *
 * @since BuddyPress (1.7)
 *
 * @uses bp_activity_at_message_notification()
 * @uses bp_activity_update_mention_count_for_user()
 *
 * @param BP_Activity_Activity $activity The BP_Activity_Activity object
 */
function bp_activity_at_name_send_emails($activity)
{
    // Are mentions disabled?
    if (!bp_activity_do_mentions()) {
        return;
    }
    // If our temporary variable doesn't exist, stop now.
    if (empty(buddypress()->activity->mentioned_users)) {
        return;
    }
    // Grab our temporary variable from bp_activity_at_name_filter_updates()
    $usernames = buddypress()->activity->mentioned_users;
    // Get rid of temporary variable
    unset(buddypress()->activity->mentioned_users);
    // Send @mentions and setup BP notifications
    foreach ((array) $usernames as $user_id => $username) {
        // If you want to disable notifications, you can use this filter to stop email sending
        if (apply_filters('bp_activity_at_name_do_notifications', true, $usernames)) {
            bp_activity_at_message_notification($activity->id, $user_id);
        }
        // Updates mention count for the user
        bp_activity_update_mention_count_for_user($user_id, $activity->id);
    }
}
/**
 * Finds and links @-mentioned users in the contents of activity items
 *
 * @since 1.2.0
 *
 * @param string $content The activity content
 * @param int $activity_id The activity id
 *
 * @uses bp_activity_find_mentions()
 * @uses bp_is_username_compatibility_mode()
 * @uses bp_core_get_userid_from_nicename()
 * @uses bp_activity_at_message_notification()
 * @uses bp_core_get_user_domain()
 * @uses bp_activity_adjust_mention_count()
 *
 * @return string $content Content filtered for mentions
 */
function bp_activity_at_name_filter($content, $activity_id = 0)
{
    $usernames = bp_activity_find_mentions($content);
    foreach ((array) $usernames as $username) {
        if (bp_is_username_compatibility_mode()) {
            $user_id = username_exists($username);
        } else {
            $user_id = bp_core_get_userid_from_nicename($username);
        }
        if (empty($user_id)) {
            continue;
        }
        // If an activity_id is provided, we can send email and BP notifications
        if ($activity_id) {
            bp_activity_at_message_notification($activity_id, $user_id);
        }
        $content = preg_replace('/(@' . $username . '\\b)/', "<a href='" . bp_core_get_user_domain($user_id) . "' rel='nofollow'>@{$username}</a>", $content);
    }
    // Adjust the activity count for this item
    if ($activity_id) {
        bp_activity_adjust_mention_count($activity_id, 'add');
    }
    return $content;
}
/**
 * Finds and links @-mentioned users in the contents of activity items
 *
 * @since 1.2.0
 *
 * @param string $content The activity content
 * @param int $activity_id The activity id
 *
 * @uses bp_activity_find_mentions()
 * @uses bp_is_username_compatibility_mode()
 * @uses bp_core_get_userid_from_nicename()
 * @uses bp_activity_at_message_notification()
 * @uses bp_core_get_user_domain()
 * @uses bp_activity_adjust_mention_count()
 *
 * @return string $content Content filtered for mentions
 */
function bp_activity_at_name_filter($content, $activity_id = 0)
{
    if ($activity_id & bp_is_active('activity')) {
        $activity = new BP_Activity_Activity($activity_id);
        // If this activity has been marked as spam, don't do anything. This prevents @notifications being sent.
        if (!empty($activity) && $activity->is_spam) {
            return $content;
        }
    }
    $usernames = bp_activity_find_mentions($content);
    foreach ((array) $usernames as $username) {
        if (bp_is_username_compatibility_mode()) {
            $user_id = username_exists($username);
        } else {
            $user_id = bp_core_get_userid_from_nicename($username);
        }
        if (empty($user_id)) {
            continue;
        }
        // If an activity_id is provided, we can send email and BP notifications
        if ($activity_id) {
            bp_activity_at_message_notification($activity_id, $user_id);
        }
        $content = preg_replace('/(@' . $username . '\\b)/', "<a href='" . bp_core_get_user_domain($user_id) . "' rel='nofollow'>@{$username}</a>", $content);
    }
    // Adjust the activity count for this item
    if ($activity_id) {
        bp_activity_adjust_mention_count($activity_id, 'add');
    }
    return $content;
}