/** * 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); } }
/** * 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; } }
/** * 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; }
/** * 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; }
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); }
/** * 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); }
/** * 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); } }