/**
 * Listener function for the logged-in user's 'last_activity' metadata.
 *
 * Many functions use a "last active" feature to show the length of time since
 * the user was last active. This function will update that time as a usermeta
 * setting for the user every 5 minutes while the user is actively browsing the
 * site.
 *
 * @uses bp_update_user_meta() BP function to update user metadata in the
 *       usermeta table.
 *
 * @return bool|null Returns false if there is nothing to do.
 */
function bp_core_record_activity()
{
    // Bail if user is not logged in
    if (!is_user_logged_in()) {
        return false;
    }
    // Get the user ID
    $user_id = bp_loggedin_user_id();
    // Bail if user is not active
    if (bp_is_user_inactive($user_id)) {
        return false;
    }
    // Get the user's last activity
    $activity = bp_get_user_last_activity($user_id);
    // Make sure it's numeric
    if (!is_numeric($activity)) {
        $activity = strtotime($activity);
    }
    // Get current time
    $current_time = bp_core_current_time();
    // Use this action to detect the very first activity for a given member
    if (empty($activity)) {
        do_action('bp_first_activity_for_member', $user_id);
    }
    // If it's been more than 5 minutes, record a newer last-activity time
    if (empty($activity) || strtotime($current_time) >= strtotime('+5 minutes', $activity)) {
        bp_update_user_last_activity($user_id, $current_time);
    }
}
Example #2
0
/**
 * Add the default role and mapped BuddyPress caps to the current user if needed
 *
 * This function will bail if the community is not global in a multisite
 * installation of WordPress, or if the user is marked as spam or deleted.
 *
 * @since BuddyPress (1.6)
 *
 * @uses is_multisite()
 * @uses bp_allow_global_access()
 * @uses bp_is_user_inactive()
 * @uses is_user_logged_in()
 * @uses current_user_can()
 * @uses get_option()
 * @uses bp_get_caps_for_role()
 *
 * @global BuddyPress $bbp
 * @return If not multisite, not global, or user is deleted/spammed
 */
function bp_global_access_role_mask()
{
    // Bail if not multisite or community is not global
    if (!is_multisite() || !bp_allow_global_access()) {
        return;
    }
    // Bail if user is marked as spam or is deleted
    if (bp_is_user_inactive()) {
        return;
    }
    // Normal user is logged in but has no caps
    if (is_user_logged_in() && !current_user_can('read')) {
        // Define local variable
        $mapped_meta_caps = array();
        // Assign user the minimal participant role to map caps to
        $default_role = bp_get_participant_role();
        // Get BuddyPress caps for the default role
        $caps_for_role = bp_get_caps_for_role($default_role);
        // Set all caps to true
        foreach ($caps_for_role as $cap) {
            $mapped_meta_caps[$cap] = true;
        }
        // Add 'read' cap just in case
        $mapped_meta_caps['read'] = true;
        $mapped_meta_caps['bp_masked'] = true;
        // Allow global access caps to be manipulated
        $mapped_meta_caps = apply_filters('bp_global_access_mapped_meta_caps', $mapped_meta_caps);
        // Assign the role and mapped caps to the current user
        global $bp;
        $bp->current_user->roles[0] = $default_role;
        $bp->current_user->caps = $mapped_meta_caps;
        $bp->current_user->allcaps = $mapped_meta_caps;
    }
}
Example #3
0
/**
 * Temporary implementation of 'bp_moderate' cap.
 *
 * In BuddyPress 1.6, the 'bp_moderate' cap was introduced. In order to
 * enforce that bp_current_user_can( 'bp_moderate' ) always returns true for
 * Administrators, we must manually add the 'bp_moderate' cap to the list of
 * user caps for Admins.
 *
 * Note that this level of enforcement is only necessary in the case of
 * non-Multisite. This is because WordPress automatically assigns every
 * capability - and thus 'bp_moderate' - to Super Admins on a Multisite
 * installation. See {@link WP_User::has_cap()}.
 *
 * This implementation of 'bp_moderate' is temporary, until BuddyPress properly
 * matches caps to roles and stores them in the database. Plugin authors: Do
 * not use this function.
 *
 * @access private
 * @since BuddyPress (1.6.0)
 *
 * @see WP_User::has_cap()
 *
 * @param array $allcaps The caps that WP associates with the given role.
 * @param array $caps The caps being tested for in WP_User::has_cap().
 * @param array $args Miscellaneous arguments passed to the user_has_cap filter.
 * @return array $allcaps The user's cap list, with 'bp_moderate' appended, if relevant.
 */
function _bp_enforce_bp_moderate_cap_for_admins($caps = array(), $cap = '', $user_id = 0, $args = array())
{
    // Bail if not checking the 'bp_moderate' cap
    if ('bp_moderate' !== $cap) {
        return $caps;
    }
    // Bail if BuddyPress is not network activated
    if (bp_is_network_activated()) {
        return $caps;
    }
    // Never trust inactive users
    if (bp_is_user_inactive($user_id)) {
        return $caps;
    }
    // Only users that can 'manage_options' on this site can 'bp_moderate'
    return array('manage_options');
}
/**
 * Listener function for the logged-in user's 'last_activity' metadata.
 *
 * Many functions use a "last active" feature to show the length of time since
 * the user was last active. This function will update that time as a usermeta
 * setting for the user every 5 minutes while the user is actively browsing the
 * site.
 *
 * @uses bp_update_user_meta() BP function to update user metadata in the
 *       usermeta table.
 *
 * @return bool|null Returns false if there is nothing to do.
 */
function bp_core_record_activity()
{
    if (!is_user_logged_in()) {
        return false;
    }
    $user_id = bp_loggedin_user_id();
    if (bp_is_user_inactive($user_id)) {
        return false;
    }
    $activity = bp_get_user_last_activity($user_id);
    if (!is_numeric($activity)) {
        $activity = strtotime($activity);
    }
    // Get current time
    $current_time = bp_core_current_time();
    // Use this action to detect the very first activity for a given member
    if (empty($activity)) {
        do_action('bp_first_activity_for_member', $user_id);
    }
    if (empty($activity) || strtotime($current_time) >= strtotime('+5 minutes', $activity)) {
        bp_update_user_last_activity($user_id, $current_time);
    }
}
/**
 * Create a new post.
 *
 * @param array $args {
 *     @type int $post_id Optional. ID of an existing post, if you want to
 *           update rather than create. Default: false.
 *     @type int $topic_id ID of the topic to which the post belongs.
 *     @type string $post_text Contents of the post.
 *     @type string $post_time Optional. Time when the post was recorded.
 *           Default: current time, as reported by {@link bp_core_current_time()}.
 *     @type int $poster_id Optional. ID of the user creating the post.
 *           Default: ID of the logged-in user.
 *     @type string $poster_ip Optional. IP address of the user creating the
 *           post. Default: the IP address found in $_SERVER['REMOTE_ADDR'].
 *     @type int $post_status Post status. Default: 0.
 *     @type int $post_position Optional. Default: false (auto).
 * }
 * @return int|bool ID of the new post on success, false on failure.
 */
function bp_forums_insert_post($args = '')
{
    /** This action is documented in bp-forums/bp-forums-screens */
    do_action('bbpress_init');
    $defaults = array('post_id' => false, 'topic_id' => false, 'post_text' => '', 'post_time' => bp_core_current_time(), 'poster_id' => bp_loggedin_user_id(), 'poster_ip' => $_SERVER['REMOTE_ADDR'], 'post_status' => 0, 'post_position' => false);
    $r = wp_parse_args($args, $defaults);
    extract($r, EXTR_SKIP);
    if (!($post = bp_forums_get_post($post_id))) {
        $post_id = false;
    }
    if (!isset($topic_id)) {
        $topic_id = $post->topic_id;
    }
    if (empty($post_text)) {
        $post_text = $post->post_text;
    }
    if (!isset($post_time)) {
        $post_time = $post->post_time;
    }
    if (!isset($post_position)) {
        $post_position = $post->post_position;
    }
    if (empty($poster_id)) {
        return false;
    }
    if (bp_is_user_inactive(bp_loggedin_user_id())) {
        return false;
    }
    $post_id = bb_insert_post(array('post_id' => $post_id, 'topic_id' => $topic_id, 'post_text' => stripslashes(trim($post_text)), 'post_time' => $post_time, 'poster_id' => $poster_id, 'poster_ip' => $poster_ip, 'post_status' => $post_status, 'post_position' => $post_position));
    if (!empty($post_id)) {
        /**
         * Fires if there was a new post created.
         *
         * @since BuddyPress (1.0.0)
         *
         * @param int $post_id ID of the newly created forum post.
         */
        do_action('bp_forums_new_post', $post_id);
    }
    return $post_id;
}
Example #6
0
/**
 * Post an activity update.
 *
 * @since BuddyPress (1.2.0)
 *
 * @uses wp_parse_args()
 * @uses bp_is_user_inactive()
 * @uses bp_core_get_userlink()
 * @uses bp_activity_add()
 * @uses apply_filters() To call the 'bp_activity_new_update_action' hook.
 * @uses apply_filters() To call the 'bp_activity_new_update_content' hook.
 * @uses apply_filters() To call the 'bp_activity_new_update_primary_link' hook.
 * @uses bp_update_user_meta()
 * @uses wp_filter_kses()
 * @uses do_action() To call the 'bp_activity_posted_update' hook.
 *
 * @param array $args {
 *     @type string $content The content of the activity update.
 *     @type int $user_id Optional. Defaults to the logged-in user.
 * }
 * @return int $activity_id The activity id
 */
function bp_activity_post_update($args = '')
{
    $r = wp_parse_args($args, array('content' => false, 'user_id' => bp_loggedin_user_id()));
    if (empty($r['content']) || !strlen(trim($r['content']))) {
        return false;
    }
    if (bp_is_user_inactive($r['user_id'])) {
        return false;
    }
    // Record this on the user's profile
    $activity_content = $r['content'];
    $primary_link = bp_core_get_userlink($r['user_id'], false, true);
    // Now write the values
    $activity_id = bp_activity_add(array('user_id' => $r['user_id'], 'content' => apply_filters('bp_activity_new_update_content', $activity_content), 'primary_link' => apply_filters('bp_activity_new_update_primary_link', $primary_link), 'component' => buddypress()->activity->id, 'type' => 'activity_update'));
    $activity_content = apply_filters('bp_activity_latest_update_content', $r['content'], $activity_content);
    // Add this update to the "latest update" usermeta so it can be fetched anywhere.
    bp_update_user_meta(bp_loggedin_user_id(), 'bp_latest_update', array('id' => $activity_id, 'content' => $activity_content));
    do_action('bp_activity_posted_update', $r['content'], $r['user_id'], $activity_id);
    return $activity_id;
}
/**
 * Post an activity update.
 *
 * @since 1.2.0
 *
 * @uses wp_parse_args()
 * @uses bp_is_user_inactive()
 * @uses bp_core_get_userlink()
 * @uses bp_activity_add()
 * @uses apply_filters() To call the 'bp_activity_new_update_action' hook.
 * @uses apply_filters() To call the 'bp_activity_new_update_content' hook.
 * @uses apply_filters() To call the 'bp_activity_new_update_primary_link' hook.
 * @uses bp_update_user_meta()
 * @uses wp_filter_kses()
 * @uses do_action() To call the 'bp_activity_posted_update' hook.
 *
 * @param array|string $args {
 *     @type string $content The content of the activity update.
 *     @type int    $user_id Optional. Defaults to the logged-in user.
 * }
 * @return int $activity_id The activity id.
 */
function bp_activity_post_update($args = '')
{
    $r = wp_parse_args($args, array('content' => false, 'user_id' => bp_loggedin_user_id()));
    if (empty($r['content']) || !strlen(trim($r['content']))) {
        return false;
    }
    if (bp_is_user_inactive($r['user_id'])) {
        return false;
    }
    // Record this on the user's profile.
    $activity_content = $r['content'];
    $primary_link = bp_core_get_userlink($r['user_id'], false, true);
    /**
     * Filters the new activity content for current activity item.
     *
     * @since 1.2.0
     *
     * @param string $activity_content Activity content posted by user.
     */
    $add_content = apply_filters('bp_activity_new_update_content', $activity_content);
    /**
     * Filters the activity primary link for current activity item.
     *
     * @since 1.2.0
     *
     * @param string $primary_link Link to the profile for the user who posted the activity.
     */
    $add_primary_link = apply_filters('bp_activity_new_update_primary_link', $primary_link);
    // Now write the values.
    $activity_id = bp_activity_add(array('user_id' => $r['user_id'], 'content' => $add_content, 'primary_link' => $add_primary_link, 'component' => buddypress()->activity->id, 'type' => 'activity_update'));
    /**
     * Filters the latest update content for the activity item.
     *
     * @since 1.6.0
     *
     * @param string $r                Content of the activity update.
     * @param string $activity_content Content of the activity update.
     */
    $activity_content = apply_filters('bp_activity_latest_update_content', $r['content'], $activity_content);
    // Add this update to the "latest update" usermeta so it can be fetched anywhere.
    bp_update_user_meta(bp_loggedin_user_id(), 'bp_latest_update', array('id' => $activity_id, 'content' => $activity_content));
    /**
     * Fires at the end of an activity post update, before returning the updated activity item ID.
     *
     * @since 1.2.0
     *
     * @param string $content     Content of the activity post update.
     * @param int    $user_id     ID of the user posting the activity update.
     * @param int    $activity_id ID of the activity item being updated.
     */
    do_action('bp_activity_posted_update', $r['content'], $r['user_id'], $activity_id);
    return $activity_id;
}
Example #8
0
function bp_forums_insert_post($args = '')
{
    global $bp;
    do_action('bbpress_init');
    $defaults = array('post_id' => false, 'topic_id' => false, 'post_text' => '', 'post_time' => bp_core_current_time(), 'poster_id' => bp_loggedin_user_id(), 'poster_ip' => $_SERVER['REMOTE_ADDR'], 'post_status' => 0, 'post_position' => false);
    $r = wp_parse_args($args, $defaults);
    extract($r, EXTR_SKIP);
    if (!($post = bp_forums_get_post($post_id))) {
        $post_id = false;
    }
    if (!isset($topic_id)) {
        $topic_id = $post->topic_id;
    }
    if (empty($post_text)) {
        $post_text = $post->post_text;
    }
    if (!isset($post_time)) {
        $post_time = $post->post_time;
    }
    if (!isset($post_position)) {
        $post_position = $post->post_position;
    }
    if (empty($poster_id)) {
        return false;
    }
    if (bp_is_user_inactive(bp_loggedin_user_id())) {
        return false;
    }
    $post_id = bb_insert_post(array('post_id' => $post_id, 'topic_id' => $topic_id, 'post_text' => stripslashes(trim($post_text)), 'post_time' => $post_time, 'poster_id' => $poster_id, 'poster_ip' => $poster_ip, 'post_status' => $post_status, 'post_position' => $post_position));
    if (!empty($post_id)) {
        do_action('bp_forums_new_post', $post_id);
    }
    return $post_id;
}
/**
 * Return the activity latest update link.
 *
 * @since BuddyPress (1.2.0)
 *
 * @uses bp_is_user_inactive()
 * @uses bp_core_is_user_deleted()
 * @uses bp_get_user_meta()
 * @uses apply_filters() To call the 'bp_get_activity_latest_update_excerpt' hook
 * @uses bp_create_excerpt()
 * @uses bp_get_root_domain()
 * @uses bp_get_activity_root_slug()
 * @uses apply_filters() To call the 'bp_get_activity_latest_update' hook
 *
 * @param int $user_id If empty, will fall back on displayed user.
 * @return string|bool $latest_update The activity latest update link.
 *         False on failure
 */
function bp_get_activity_latest_update($user_id = 0)
{
    if (empty($user_id)) {
        $user_id = bp_displayed_user_id();
    }
    if (bp_is_user_inactive($user_id)) {
        return false;
    }
    if (!($update = bp_get_user_meta($user_id, 'bp_latest_update', true))) {
        return false;
    }
    /**
     * Filters the latest update excerpt.
     *
     * @since BuddyPress (1.2.10)
     *
     * @param string $value The excerpt for the latest update.
     */
    $latest_update = apply_filters('bp_get_activity_latest_update_excerpt', trim(strip_tags(bp_create_excerpt($update['content'], 358))));
    $latest_update = sprintf('%s <a href="%s">%s</a>', $latest_update, esc_url_raw(bp_activity_get_permalink($update['id'])), esc_attr__('View', 'buddypress'));
    /**
     * Filters the latest update excerpt with view link appended to the end.
     *
     * @since BuddyPress (1.2.0)
     *
     * @param string $latest_update The latest update with "view" link appended to it.
     */
    return apply_filters('bp_get_activity_latest_update', $latest_update);
}
Example #10
0
/**
 * Return the activity latest update link.
 *
 * @since BuddyPress (1.2)
 *
 * @uses bp_is_user_inactive()
 * @uses bp_core_is_user_deleted()
 * @uses bp_get_user_meta()
 * @uses apply_filters() To call the 'bp_get_activity_latest_update_excerpt' hook
 * @uses bp_create_excerpt()
 * @uses bp_get_root_domain()
 * @uses bp_get_activity_root_slug()
 * @uses apply_filters() To call the 'bp_get_activity_latest_update' hook
 *
 * @param int $user_id If empty, will fall back on displayed user.
 * @return string|bool $latest_update The activity latest update link.
 *         False on failure
 */
function bp_get_activity_latest_update($user_id = 0)
{
    if (empty($user_id)) {
        $user_id = bp_displayed_user_id();
    }
    if (bp_is_user_inactive($user_id)) {
        return false;
    }
    if (!($update = bp_get_user_meta($user_id, 'bp_latest_update', true))) {
        return false;
    }
    $latest_update = apply_filters('bp_get_activity_latest_update_excerpt', trim(strip_tags(bp_create_excerpt($update['content'], 358))));
    $latest_update .= ' <a href="' . bp_get_root_domain() . '/' . bp_get_activity_root_slug() . '/p/' . $update['id'] . '/"> ' . __('View', 'buddypress') . '</a>';
    return apply_filters('bp_get_activity_latest_update', $latest_update);
}
Example #11
0
/**
 * Listener function for the logged-in user's 'last_activity' metadata.
 *
 * Many functions use a "last active" feature to show the length of time since
 * the user was last active. This function will update that time as a usermeta
 * setting for the user every 5 minutes while the user is actively browsing the
 * site.
 *
 * @uses bp_update_user_meta() BP function to update user metadata in the
 *       usermeta table.
 *
 * @return bool|null Returns false if there is nothing to do.
 */
function bp_core_record_activity()
{
    // Bail if user is not logged in
    if (!is_user_logged_in()) {
        return false;
    }
    // Get the user ID
    $user_id = bp_loggedin_user_id();
    // Bail if user is not active
    if (bp_is_user_inactive($user_id)) {
        return false;
    }
    // Get the user's last activity
    $activity = bp_get_user_last_activity($user_id);
    // Make sure it's numeric
    if (!is_numeric($activity)) {
        $activity = strtotime($activity);
    }
    // Get current time
    $current_time = bp_core_current_time();
    // Use this action to detect the very first activity for a given member
    if (empty($activity)) {
        /**
         * Fires inside the recording of an activity item.
         *
         * Use this action to detect the very first activity for a given member.
         *
         * @since BuddyPress (1.6.0)
         *
         * @param int $user_id ID of the user whose activity is recorded.
         */
        do_action('bp_first_activity_for_member', $user_id);
    }
    // If it's been more than 5 minutes, record a newer last-activity time
    if (empty($activity) || strtotime($current_time) >= strtotime('+5 minutes', $activity)) {
        bp_update_user_last_activity($user_id, $current_time);
    }
}
/**
 * Post an activity update
 *
 * @since BuddyPress (1.2)
 *
 * @param array $args See docs for $defaults for details
 *
 * @global object $bp BuddyPress global settings
 * @uses wp_parse_args()
 * @uses bp_is_user_inactive()
 * @uses bp_core_get_userlink()
 * @uses bp_activity_add()
 * @uses apply_filters() To call the 'bp_activity_new_update_action' hook
 * @uses apply_filters() To call the 'bp_activity_new_update_content' hook
 * @uses apply_filters() To call the 'bp_activity_new_update_primary_link' hook
 * @uses bp_update_user_meta()
 * @uses wp_filter_kses()
 * @uses do_action() To call the 'bp_activity_posted_update' hook
 *
 * @return int $activity_id The activity id
 */
function bp_activity_post_update($args = '')
{
    global $bp;
    $defaults = array('content' => false, 'user_id' => bp_loggedin_user_id());
    $r = wp_parse_args($args, $defaults);
    extract($r, EXTR_SKIP);
    if (empty($content) || !strlen(trim($content))) {
        return false;
    }
    if (bp_is_user_inactive($user_id)) {
        return false;
    }
    // Record this on the user's profile
    $from_user_link = bp_core_get_userlink($user_id);
    $activity_action = sprintf(__('%s posted an update', 'buddypress'), $from_user_link);
    $activity_content = $content;
    $primary_link = bp_core_get_userlink($user_id, false, true);
    // Now write the values
    $activity_id = bp_activity_add(array('user_id' => $user_id, 'action' => apply_filters('bp_activity_new_update_action', $activity_action), 'content' => apply_filters('bp_activity_new_update_content', $activity_content), 'primary_link' => apply_filters('bp_activity_new_update_primary_link', $primary_link), 'component' => $bp->activity->id, 'type' => 'activity_update'));
    $activity_content = apply_filters('bp_activity_latest_update_content', $content);
    // Add this update to the "latest update" usermeta so it can be fetched anywhere.
    bp_update_user_meta(bp_loggedin_user_id(), 'bp_latest_update', array('id' => $activity_id, 'content' => $content));
    do_action('bp_activity_posted_update', $content, $user_id, $activity_id);
    return $activity_id;
}
/**
 * Record user activity to the database. Many functions use a "last active" feature to
 * show the length of time since the user was last active.
 * This function will update that time as a usermeta setting for the user every 5 minutes.
 *
 * @package BuddyPress Core
 * @global $userdata WordPress user data for the current logged in user.
 * @uses bp_update_user_meta() BP function to update user metadata in the usermeta table.
 */
function bp_core_record_activity()
{
    global $bp;
    if (!is_user_logged_in()) {
        return false;
    }
    $user_id = bp_loggedin_user_id();
    if (bp_is_user_inactive($user_id)) {
        return false;
    }
    $activity = bp_get_user_meta($user_id, 'last_activity', true);
    if (!is_numeric($activity)) {
        $activity = strtotime($activity);
    }
    // Get current time
    $current_time = bp_core_current_time();
    if (empty($activity) || strtotime($current_time) >= strtotime('+5 minutes', $activity)) {
        bp_update_user_meta($user_id, 'last_activity', $current_time);
    }
}