/**
 * Set Gallery as enabled/disabled
 * 
 * @param type $group_id
 * @param type $enabled
 * @return boolean
 */
function mpp_group_set_gallery_state($group_id = false, $enabled = 'yes')
{
    if (!$group_id) {
        $group_id = bp_get_group_id(groups_get_current_group());
    }
    if (!$group_id) {
        return false;
    }
    //default settings from gloabl
    $is_enabled = groups_update_groupmeta($group_id, '_mpp_is_enabled', $enabled);
    return $is_enabled;
}
/**
 * Restrict access to a group regarding its 'member type'
 *
 * If a user is not logged in, he is redirected to the login form
 * If a user ! member type, he is redirected to the groups directory
 * If a user is a super admin, he can access
 *
 * @param  bool $user_has_access
 * @param  array &$no_access_args the redirect args
 * @return bool False if member type doesn't match, true otherwise
 */
function cfbgr_enqueue_current_user_has_access($user_has_access, &$no_access_args)
{
    // If the user does not already have access bail
    if (empty($user_has_access)) {
        return $user_has_access;
    }
    // Get the member type of the group
    $restriction = groups_get_groupmeta(bp_get_current_group_id(), 'cf-buddypress-group-restrictions');
    // Don't touch to regular groups and leave Admins access
    if (empty($restriction) || bp_current_user_can('bp_moderate')) {
        return $user_has_access;
    }
    $current_group = groups_get_current_group();
    if (!is_user_logged_in()) {
        $user_has_access = false;
        $no_access_args = array('message' => __('You must log in to access the page you requested.', 'buddypress-group-restrictions'), 'root' => bp_get_group_permalink($current_group) . 'home/', 'redirect' => false);
        return $user_has_access;
        // Current user does not match the restriction
    } elseif ($restriction !== bp_get_member_type(bp_loggedin_user_id())) {
        $user_has_access = false;
        // Get infos about the member type
        $member_type_object = bp_get_member_type_object($restriction);
        $singular_name = '';
        if (!empty($member_type_object->labels['singular_name'])) {
            $singular_name = $member_type_object->labels['singular_name'];
        }
        // You need to redirect to a BuddyPress page to have
        $no_access_args = array('mode' => 3, 'message' => sprintf(__('Sorry the group you tried to enter is only viewable for %s members', 'buddypress-group-restrictions'), esc_html($singular_name)), 'root' => bp_get_groups_directory_permalink(), 'redirect' => false);
        return $user_has_access;
    }
    // By default, leave BuddyPress deal with access
    return $user_has_access;
}
Beispiel #3
0
 /**
  * Load Custom tabs on BuddyPress
  *
  * @global object $bp global BuddyPress object
  */
 function custom_media_nav_tab()
 {
     global $bp;
     if (!function_exists("bp_core_new_nav_item")) {
         return;
     }
     if (bp_is_blog_page() || !bp_is_group() && !(isset($bp->displayed_user) && isset($bp->displayed_user->id)) || apply_filters('rtmedia_render_bp_nav', false)) {
         return;
     }
     global $rtmedia;
     if (function_exists("bp_is_group") && !bp_is_group()) {
         if (isset($bp->displayed_user) && isset($bp->displayed_user->id)) {
             $profile_counts = $this->actual_counts($bp->displayed_user->id);
         }
         $tab_position = apply_filters('rtmedia_media_tab_position', 99);
         if ($rtmedia->options["buddypress_enableOnProfile"] != 0) {
             bp_core_new_nav_item(array('name' => RTMEDIA_MEDIA_LABEL . '<span>' . $profile_counts['total']['all'] . '</span>', 'slug' => apply_filters('rtmedia_media_tab_slug', RTMEDIA_MEDIA_SLUG), 'screen_function' => array($this, 'media_screen'), 'default_subnav_slug' => 'all', 'position' => $tab_position));
         }
     }
     if (bp_is_group() && $rtmedia->options["buddypress_enableOnGroup"] != 0) {
         global $bp;
         $media_enabled = true;
         //filter for rtMedia PRO for PER GROUP MEDIA enable/disable functionality
         $media_enabled = apply_filters('rtmedia_media_enabled_for_current_group', $media_enabled);
         // check if current user can view this group
         $current_group = groups_get_current_group();
         $is_visible_to_current_user = $current_group->is_visible;
         if ($media_enabled && $is_visible_to_current_user) {
             $group_counts = $this->actual_counts($bp->groups->current_group->id, "group");
             $bp->bp_options_nav[bp_get_current_group_slug()]['media'] = array('name' => RTMEDIA_MEDIA_LABEL . '<span>' . $group_counts['total']['all'] . '</span>', 'link' => trailingslashit(bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/' . bp_get_current_group_slug() . '/') . RTMEDIA_MEDIA_SLUG, 'slug' => RTMEDIA_MEDIA_SLUG, 'user_has_access' => true, 'css_id' => 'rtmedia-media-nav', 'position' => 99, 'screen_function' => array($this, 'media_screen'), 'default_subnav_slug' => 'all');
         }
     }
 }
 /**
  * Gets the item id of the item (eg group, user) associated with the page you're on.
  *
  * @package BuddyPress Docs
  * @since 1.0-beta
  *
  * @return str $view The current item type
  */
 function setup_item()
 {
     global $bp;
     if (empty($this->item_type)) {
         return false;
     }
     $id = '';
     $name = '';
     $slug = '';
     switch ($this->item_type) {
         case 'group':
             if (bp_is_group()) {
                 $group = groups_get_current_group();
                 $id = $group->id;
                 $name = $group->name;
                 $slug = $group->slug;
             }
             break;
         case 'user':
             if (bp_is_user()) {
                 $id = bp_displayed_user_id();
                 $name = bp_get_displayed_user_fullname();
                 $slug = bp_get_displayed_user_username();
             }
             break;
     }
     // Todo: abstract into groups. Will be a pain
     $this->item_id = apply_filters('bp_docs_get_item_id', $id);
     $this->item_name = apply_filters('bp_docs_get_item_name', $name);
     $this->item_slug = apply_filters('bp_docs_get_item_slug', $slug);
     // Put some stuff in $bp
     $bp->bp_docs->current_item = $this->item_id;
 }
function mp_group_nav()
{
    if (!bp_is_group()) {
        return;
    }
    $component = 'groups';
    $component_id = groups_get_current_group()->id;
    if (mpp_user_can_create_gallery($component, $component_id)) {
        echo sprintf("<li><a href='%s'>%s</a></li>", mpp_get_gallery_base_url($component, $component_id), __('All Galleries', 'mediapress'));
        echo sprintf("<li><a href='%s'>%s</a></li>", mpp_get_gallery_create_url($component, $component_id), __('Create Gallery', 'mediapress'));
    }
}
Beispiel #6
0
/**
 * Populate the $groups_template global for use outside the loop
 *
 * We build the group navigation outside the groups loop. In order to use BP's
 * group template functions while building the nav, we must have the template
 * global populated. In this function, we fill in any missing data, based on
 * the current group.
 *
 * This issue should be fixed more elegantly upstream in BuddyPress, ideally
 * by making the template functions fall back on the current group when the
 * loop global is not populated.
 */
function wff_populate_group_global()
{
    global $groups_template;
    if (bp_is_group() && isset($groups_template->groups[0]->group_id) && empty($groups_template->groups[0]->name)) {
        $current_group = groups_get_current_group();
        // Fill in all missing properties
        foreach ($current_group as $cur_key => $cur_value) {
            if (!isset($groups_template->groups[0]->{$cur_key})) {
                $groups_template->groups[0]->{$cur_key} = $cur_value;
            }
        }
    }
}
Beispiel #7
0
 /**
  * Load Custom tabs on BuddyPress
  *
  * @global object $bp global BuddyPress object
  */
 function custom_media_nav_tab()
 {
     $bp = buddypress();
     if (!function_exists('bp_core_new_nav_item')) {
         return;
     }
     if (bp_is_blog_page() || !bp_is_group() && !(isset($bp->displayed_user) && isset($bp->displayed_user->id)) || apply_filters('rtmedia_render_bp_nav', false)) {
         return;
     }
     global $rtmedia;
     if (function_exists('bp_is_group') && !bp_is_group()) {
         if (isset($bp->displayed_user) && isset($bp->displayed_user->id)) {
             $profile_counts = $this->actual_counts($bp->displayed_user->id);
         }
         $tab_position = apply_filters('rtmedia_media_tab_position', 99);
         if (0 !== intval($rtmedia->options['buddypress_enableOnProfile'])) {
             bp_core_new_nav_item(array('name' => RTMEDIA_MEDIA_LABEL . ' <span>' . $profile_counts['total']['all'] . '</span>', 'slug' => apply_filters('rtmedia_media_tab_slug', RTMEDIA_MEDIA_SLUG), 'screen_function' => array($this, 'media_screen'), 'default_subnav_slug' => 'all', 'position' => $tab_position));
         }
     }
     if (bp_is_group() && 0 !== intval($rtmedia->options['buddypress_enableOnGroup'])) {
         $media_enabled = true;
         //filter for rtMedia PRO for PER GROUP MEDIA enable/disable functionality
         $media_enabled = apply_filters('rtmedia_media_enabled_for_current_group', $media_enabled);
         // check if current user can view this group
         $current_group = groups_get_current_group();
         /**
          * remove `$current_group->is_visible` and add `bp_group_is_visible( $current_group )`
          * reason   : In Buddypress 2.7 `is_visible` return false so we can't display `media` tab on group
          * issue id	: http://git.rtcamp.com/rtmedia/rtMedia/issues/119
          */
         // $is_visible_to_current_user = $current_group->is_visible;
         $is_visible_to_current_user = bp_group_is_visible($current_group);
         if ($media_enabled && $is_visible_to_current_user) {
             $group_counts = $this->actual_counts($bp->groups->current_group->id, 'group');
             $slug = apply_filters('rtmedia_group_media_tab_slug', RTMEDIA_MEDIA_SLUG);
             if (isset($bp->version) && $bp->version > '2.5.3') {
                 /*
                  * As from BuddyPress 2.6, you can't access $bp->bp_options_nav directly.
                  * Use `bp_core_new_subnav_item` to add subnav item.
                  *
                  * Check https://buddypress.trac.wordpress.org/ticket/6534 and https://buddypress.trac.wordpress.org/changeset/10745
                  * for more details
                  */
                 bp_core_new_subnav_item(array('name' => RTMEDIA_MEDIA_LABEL . ' <span>' . $group_counts['total']['all'] . '</span>', 'link' => trailingslashit(bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/' . bp_get_current_group_slug() . '/') . $slug, 'slug' => $slug, 'parent_slug' => bp_get_current_group_slug(), 'parent_url' => trailingslashit(bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/' . bp_get_current_group_slug() . '/'), 'user_has_access' => true, 'css_id' => 'rtmedia-media-nav', 'position' => 99, 'screen_function' => array($this, 'media_screen'), 'default_subnav_slug' => 'all'));
             } else {
                 $bp->bp_options_nav[bp_get_current_group_slug()]['media'] = array('name' => RTMEDIA_MEDIA_LABEL . ' <span>' . $group_counts['total']['all'] . '</span>', 'link' => trailingslashit(bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/' . bp_get_current_group_slug() . '/') . $slug, 'slug' => $slug, 'user_has_access' => true, 'css_id' => 'rtmedia-media-nav', 'position' => 99, 'screen_function' => array($this, 'media_screen'), 'default_subnav_slug' => 'all');
             }
         }
     }
 }
/**
 * Builds the BuddyDrive Group url
 *
 * @param integer $group_id the group id
 * @uses groups_get_group to get group datas
 * @uses groups_get_current_group() if no id was given to get current group datas
 * @uses bp_get_group_permalink() to build the group permalink
 * @uses buddydrive_get_slug() to get the BuddyDrive slug to end to the group url
 * @return string $buddydrive_link the link to user's BuddyDrive
 */
function buddydrive_get_group_buddydrive_url($group_id = 0)
{
    $buddydrive_link = false;
    if (!empty($group_id)) {
        $group = groups_get_group(array('group_id' => $group_id));
    } else {
        $group = groups_get_current_group();
    }
    if (!empty($group)) {
        $group_link = bp_get_group_permalink($group);
        $buddydrive_link = trailingslashit($group_link . buddydrive_get_slug());
    }
    return $buddydrive_link;
}
 function the_group()
 {
     global $group;
     $this->in_the_loop = true;
     $this->group = $this->next_group();
     if ($this->single_group) {
         $this->group = groups_get_current_group();
     } else {
         if ($this->group) {
             wp_cache_set('groups_group_nouserdata_' . $this->group->id, $this->group, 'bp');
         }
     }
     if (0 == $this->current_group) {
         // loop has just started
         do_action('loop_start');
     }
 }
function groups_record_activity($args = '')
{
    global $bp;
    if (!bp_is_active('activity')) {
        return false;
    }
    // Set the default for hide_sitewide by checking the status of the group
    $hide_sitewide = false;
    if (!empty($args['item_id'])) {
        if (bp_get_current_group_id() == $args['item_id']) {
            $group = groups_get_current_group();
        } else {
            $group = groups_get_group(array('group_id' => $args['item_id']));
        }
        if (isset($group->status) && 'public' != $group->status) {
            $hide_sitewide = true;
        }
    }
    $defaults = array('id' => false, 'user_id' => bp_loggedin_user_id(), 'action' => '', 'content' => '', 'primary_link' => '', 'component' => $bp->groups->id, 'type' => false, 'item_id' => false, 'secondary_item_id' => false, 'recorded_time' => bp_core_current_time(), 'hide_sitewide' => $hide_sitewide);
    $r = wp_parse_args($args, $defaults);
    extract($r);
    return bp_activity_add(array('id' => $id, 'user_id' => $user_id, 'action' => $action, 'content' => $content, 'primary_link' => $primary_link, 'component' => $component, 'type' => $type, 'item_id' => $item_id, 'secondary_item_id' => $secondary_item_id, 'recorded_time' => $recorded_time, 'hide_sitewide' => $hide_sitewide));
}
 public function view_single()
 {
     $bp = buddypress();
     if (function_exists('bp_is_group') && !bp_is_group()) {
         return;
     }
     //do not catch the request for creating new post
     if (bp_is_action_variable('create', 0)) {
         return;
     }
     $current_group = groups_get_current_group();
     if (bcg_is_disabled($current_group->id)) {
         return;
     }
     //if the group is private/hidden and user is not member, return
     if (($current_group->status == 'private' || $current_group->status == 'hidden') && (!is_user_logged_in() || !groups_is_user_member(bp_loggedin_user_id(), $current_group->id))) {
         return;
         //avoid prioivacy troubles
     }
     if (bcg_is_component() && !empty($bp->action_variables[0])) {
         //should we check for the existence of the post?
         add_action('bp_template_content', array($this, 'get_single_post_contents'));
     }
 }
function bp_get_groups_action_link($action = '', $query_args = '', $nonce = false)
{
    global $bp;
    // Must be a group
    if (empty($bp->groups->current_group->id)) {
        return;
    }
    // Append $action to $url if provided
    if (!empty($action)) {
        $url = bp_get_group_permalink(groups_get_current_group()) . $action;
    } else {
        $url = bp_get_group_permalink(groups_get_current_group());
    }
    // Add a slash at the end of our user url
    $url = trailingslashit($url);
    // Add possible query arg
    if (!empty($query_args) && is_array($query_args)) {
        $url = add_query_arg($query_args, $url);
    }
    // To nonce, or not to nonce...
    if (true === $nonce) {
        $url = wp_nonce_url($url);
    } elseif (is_string($nonce)) {
        $url = wp_nonce_url($url, $nonce);
    }
    // Return the url, if there is one
    if (!empty($url)) {
        return $url;
    }
}
 /**
  * Show settings on single group page in front end
  * 
  */
 public function show_settings()
 {
     $group_id = bp_get_current_group_id();
     if ($this->current_user_can_modify_settings($group_id)) {
         echo "<div class='group-page-link-box'>";
         echo "<h4>" . __('Link to Page', 'link-page-to-groups') . "</h4>";
         $this->admin_metabox(groups_get_current_group());
         echo "</div>";
         echo "<hr />";
     }
 }
 function rt_theme_compat_reset_post($args = array())
 {
     global $wp_query, $post;
     // Switch defaults if post is set
     global $rtmedia_query;
     if (isset($wp_query->post)) {
         if (isset($rtmedia_query->query) && isset($rtmedia_query->query["media_type"]) && $rtmedia_query->query["media_type"] == "album" && isset($rtmedia_query->media_query["album_id"])) {
             foreach ($rtmedia_query->album as $al) {
                 if ($al->id == $rtmedia_query->media_query["album_id"]) {
                     $wp_query->post = get_post($al->media_id);
                     break;
                 }
             }
         } else {
             if (isset($rtmedia_query->media) && count($rtmedia_query->media) == 1 && $rtmedia_query->media) {
                 $wp_query->post = get_post($rtmedia_query->media[0]->media_id);
             }
         }
         $dummy = wp_parse_args($args, array('ID' => $wp_query->post->ID, 'post_status' => $wp_query->post->post_status, 'post_author' => $wp_query->post->post_author, 'post_parent' => $wp_query->post->post_parent, 'post_type' => 'rtmedia', 'post_date' => $wp_query->post->post_date, 'post_date_gmt' => $wp_query->post->post_date_gmt, 'post_modified' => $wp_query->post->post_modified, 'post_modified_gmt' => $wp_query->post->post_modified_gmt, 'post_content' => $wp_query->post->post_content, 'post_title' => $wp_query->post->post_title, 'post_excerpt' => $wp_query->post->post_excerpt, 'post_content_filtered' => $wp_query->post->post_content_filtered, 'post_mime_type' => $wp_query->post->post_mime_type, 'post_password' => $wp_query->post->post_password, 'post_name' => $wp_query->post->post_name, 'guid' => $wp_query->post->guid, 'menu_order' => $wp_query->post->menu_order, 'pinged' => $wp_query->post->pinged, 'to_ping' => $wp_query->post->to_ping, 'ping_status' => $wp_query->post->ping_status, 'comment_status' => $wp_query->post->comment_status, 'comment_count' => $wp_query->post->comment_count, 'filter' => $wp_query->post->filter, 'is_404' => false, 'is_page' => false, 'is_single' => false, 'is_archive' => false, 'is_tax' => false));
     } else {
         $dummy = wp_parse_args($args, array('ID' => 0, 'post_status' => 'public', 'post_author' => 0, 'post_parent' => 0, 'post_type' => 'bp_member', 'post_date' => 0, 'post_date_gmt' => 0, 'post_modified' => 0, 'post_modified_gmt' => 0, 'post_content' => '', 'post_title' => '', 'post_excerpt' => '', 'post_content_filtered' => '', 'post_mime_type' => '', 'post_password' => '', 'post_name' => '', 'guid' => '', 'menu_order' => 0, 'pinged' => '', 'to_ping' => '', 'ping_status' => '', 'comment_status' => 'closed', 'comment_count' => 0, 'filter' => 'raw', 'is_404' => false, 'is_page' => false, 'is_single' => false, 'is_archive' => false, 'is_tax' => false));
     }
     if (function_exists("bp_is_group")) {
         if (bp_is_group()) {
             $dummy['post_type'] = "bp_group";
             if ("bp-default" != get_option('stylesheet')) {
                 $dummy['post_title'] = '<a href="' . bp_get_group_permalink(groups_get_current_group()) . '">' . bp_get_current_group_name() . '</a>';
             }
         } else {
             $dummy['post_type'] = "bp_member";
             if ("bp-default" != get_option('stylesheet')) {
                 $dummy['post_title'] = '<a href="' . bp_get_displayed_user_link() . '">' . bp_get_displayed_user_fullname() . '</a>';
             }
         }
     } else {
         global $rtmedia_query;
         $dummy['comment_status'] = 'closed';
         if (isset($rtmedia_query->media_query)) {
             if (isset($rtmedia_query->media_query["media_author"])) {
                 $dummy["post_author"] = $rtmedia_query->media_query["media_author"];
             }
             if (isset($rtmedia_query->media_query["id"])) {
                 //var_dump($rtmedia_query);
                 //echo $rtmedia_query->media_query["id"];
             }
         }
     }
     // Bail if dummy post is empty
     if (empty($dummy)) {
         return;
     }
     // Set the $post global
     $post = new WP_Post((object) $dummy);
     // Copy the new post global into the main $wp_query
     $wp_query->post = $post;
     $wp_query->posts = array($post);
     // Prevent comments form from appearing
     $wp_query->post_count = 1;
     $wp_query->is_404 = $dummy['is_404'];
     $wp_query->is_page = $dummy['is_page'];
     $wp_query->is_single = $dummy['is_single'];
     $wp_query->is_archive = $dummy['is_archive'];
     $wp_query->is_tax = $dummy['is_tax'];
     // Clean up the dummy post
     unset($dummy);
     /**
      * Force the header back to 200 status if not a deliberate 404
      *
      * @see http://bbpress.trac.wordpress.org/ticket/1973
      */
     if (!$wp_query->is_404()) {
         status_header(200);
     }
 }
 /**
  * Add custom template hierarchy to theme compat for group pages.
  *
  * This is to mirror how WordPress has
  * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
  *
  * @since 1.8.0
  *
  * @param string $templates The templates from bp_get_theme_compat_templates().
  * @return array $templates Array of custom templates to look for.
  */
 public function single_template_hierarchy($templates)
 {
     // Setup some variables we're going to reference in our custom templates.
     $group = groups_get_current_group();
     /**
      * Filters the Groups single pages template hierarchy based on priority.
      *
      * @since 1.8.0
      *
      * @param array $value Array of default template files to use.
      */
     $new_templates = apply_filters('bp_template_hierarchy_groups_single_item', array('groups/single/index-id-' . sanitize_file_name(bp_get_current_group_id()) . '.php', 'groups/single/index-slug-' . sanitize_file_name(bp_get_current_group_slug()) . '.php', 'groups/single/index-action-' . sanitize_file_name(bp_current_action()) . '.php', 'groups/single/index-status-' . sanitize_file_name($group->status) . '.php', 'groups/single/index.php'));
     // Merge new templates with existing stack.
     // @see bp_get_theme_compat_templates().
     $templates = array_merge((array) $new_templates, $templates);
     return $templates;
 }
/**
 * Add group information to directory breadcrumbs.
 *
 * @since 1.9.0
 *
 * @param array $crumbs
 * @return array
 */
function bp_docs_group_directory_breadcrumb($crumbs)
{
    if (bp_is_group()) {
        $group_crumbs = array(sprintf('<a href="%s">%s</a>', bp_get_group_permalink(groups_get_current_group()) . bp_docs_get_slug() . '/', sprintf(_x('%s&#8217;s Docs', 'group Docs directory breadcrumb', 'bp-docs'), esc_html(bp_get_current_group_name()))));
        $crumbs = array_merge($group_crumbs, $crumbs);
    }
    return $crumbs;
}
 /**
  * Returns the activity delete arguments for a rendez-vous removed from a group
  *
  * @package Rendez Vous
  * @subpackage Groups
  *
  * @since Rendez Vous (1.1.0)
  *
  * @param  array                      $args the activity delete arguments
  * @uses   bp_is_group()              to make sure the user is displaying a group
  * @uses   groups_get_current_group() to get the current group object
  * @uses   buddypress()               to get BuddyPress instance
  * @return array                      the activity delete arguments
  */
 public function group_activity_delete_args($args = array())
 {
     if (!bp_is_group() || empty($args['item_id'])) {
         return $args;
     }
     $group = groups_get_current_group();
     $rendez_vous_id = $args['item_id'];
     $args = array('item_id' => $group->id, 'secondary_item_id' => $rendez_vous_id, 'component' => buddypress()->groups->id);
     return $args;
 }
Beispiel #18
0
/**
 * Update an existing group forum post.
 *
 * Uses the bundled version of bbPress packaged with BuddyPress.
 *
 * @since BuddyPress (1.1.0)
 *
 * @param int    $post_id   The post ID of the existing forum post.
 * @param string $post_text The text for the forum post.
 * @param int    $topic_id  The topic ID of the existing forum topic.
 * @param mixed  $page      The page number where the new forum post should reside. Optional.
 *
 * @return mixed The forum post ID on success. Boolean false on failure.
 */
function groups_update_group_forum_post($post_id, $post_text, $topic_id, $page = false)
{
    $bp = buddypress();
    /** This filter is documented in bp-groups/bp-groups-forums.php */
    $post_text = apply_filters('group_forum_post_text_before_save', $post_text);
    /** This filter is documented in bp-groups/bp-groups-forums.php */
    $topic_id = apply_filters('group_forum_post_topic_id_before_save', $topic_id);
    $post = bp_forums_get_post($post_id);
    $post_id = bp_forums_insert_post(array('post_id' => $post_id, 'post_text' => $post_text, 'post_time' => $post->post_time, 'topic_id' => $topic_id, 'poster_id' => $post->poster_id));
    if (empty($post_id)) {
        return false;
    }
    $topic = bp_forums_get_topic_details($topic_id);
    $activity_action = sprintf(__('%1$s replied to the forum topic %2$s in the group %3$s', 'buddypress'), bp_core_get_userlink($post->poster_id), '<a href="' . bp_get_group_permalink(groups_get_current_group()) . 'forum/topic/' . $topic->topic_slug . '">' . esc_attr($topic->topic_title) . '</a>', '<a href="' . bp_get_group_permalink(groups_get_current_group()) . '">' . esc_attr(bp_get_current_group_name()) . '</a>');
    $activity_content = bp_create_excerpt($post_text);
    $primary_link = bp_get_group_permalink(groups_get_current_group()) . 'forum/topic/' . $topic->topic_slug . '/';
    if (!empty($page)) {
        $primary_link .= "?topic_page=" . $page;
    }
    // Get the corresponding activity item
    if (bp_is_active('activity')) {
        $id = bp_activity_get_activity_id(array('user_id' => $post->poster_id, 'component' => $bp->groups->id, 'type' => 'new_forum_post', 'item_id' => bp_get_current_group_id(), 'secondary_item_id' => $post_id));
    }
    /** This filter is documented in bp-groups/bp-groups-forums.php */
    $action = apply_filters_ref_array('groups_activity_new_forum_post_action', array($activity_action, $post_text, &$topic, &$topic));
    /** This filter is documented in bp-groups/bp-groups-forums.php */
    $content = apply_filters_ref_array('groups_activity_new_forum_post_content', array($activity_content, $post_text, &$topic, &$topic));
    /** This filter is documented in bp-groups/bp-groups-forums.php */
    $filtered_primary_link = apply_filters('groups_activity_new_forum_post_primary_link', $primary_link . "#post-" . $post_id);
    groups_record_activity(array('id' => $id, 'action' => $action, 'content' => $content, 'primary_link' => $filtered_primary_link, 'type' => 'new_forum_post', 'item_id' => (int) bp_get_current_group_id(), 'user_id' => (int) $post->poster_id, 'secondary_item_id' => $post_id, 'recorded_time' => $post->post_time));
    /**
     * Fires after the update of a group forum post.
     *
     * @since BuddyPress (1.1.0)
     *
     * @param object $post  Object holding current post being updated.
     * @param object $topic Object holding current topic details. Passed by reference.
     */
    do_action_ref_array('groups_update_group_forum_post', array($post, &$topic));
    return $post_id;
}
/**
 * BuddyDrive Loop : do we have items for the query asked
 *
 * @param  array $args the arguments of the query
 * @global object $buddydrive_template
 * @uses buddydrive_get_folder_post_type() to get BuddyFolder post type
 * @uses buddydrive_get_file_post_type() to get BuddyFile post type
 * @uses bp_displayed_user_id() to default to current displayed user
 * @uses bp_current_action() to get the current action ( files / friends / admin)
 * @uses bp_is_active() to check if groups component is active
 * @uses buddydrive_is_group() are we on a group's BuddyDrive ?
 * @uses wp_parse_args() to merge defaults and args
 * @uses BuddyDrive_Item::get() to request the DB
 * @uses BuddyDrive_Item::have_posts to know if BuddyItems matched the query
 * @return the result of the query
 */
function buddydrive_has_items($args = '')
{
    global $buddydrive_template;
    // This keeps us from firing the query more than once
    if (empty($buddydrive_template)) {
        $defaulttype = array(buddydrive_get_folder_post_type(), buddydrive_get_file_post_type());
        $user = $group_id = $buddyscope = false;
        if (bp_displayed_user_id()) {
            $user = bp_displayed_user_id();
        }
        $buddyscope = bp_current_action();
        if ($buddyscope == buddydrive_get_friends_subnav_slug()) {
            $buddyscope = 'friends';
        }
        if (is_admin()) {
            $buddyscope = 'admin';
        }
        if (bp_is_active('groups') && buddydrive_is_group()) {
            $group = groups_get_current_group();
            $group_id = $group->id;
            $buddyscope = 'groups';
        }
        /***
         * Set the defaults for the parameters you are accepting via the "buddydrive_has_items()"
         * function call
         */
        $defaults = array('id' => false, 'name' => false, 'group_id' => $group_id, 'user_id' => $user, 'per_page' => 10, 'paged' => 1, 'type' => $defaulttype, 'buddydrive_scope' => $buddyscope, 'search' => false, 'buddydrive_parent' => 0, 'exclude' => 0, 'orderby' => 'title', 'order' => 'ASC');
        $r = bp_parse_args($args, $defaults, 'buddydrive_has_items');
        if ('admin' === $r['buddydrive_scope'] && !bp_current_user_can('bp_moderate')) {
            $r['buddydrive_scope'] = 'files';
        }
        $buddydrive_template = new BuddyDrive_Item();
        if (!empty($search)) {
            $buddydrive_template->get(array('per_page' => $r['per_page'], 'paged' => $r['paged'], 'type' => $r['type'], 'buddydrive_scope' => $r['buddydrive_scope'], 'search' => $r['search'], 'orderby' => $r['orderby'], 'order' => $r['order']));
        } else {
            $buddydrive_template->get(array('id' => $r['id'], 'name' => $r['name'], 'group_id' => $r['group_id'], 'user_id' => $r['user_id'], 'per_page' => $r['per_page'], 'paged' => $r['paged'], 'type' => $r['type'], 'buddydrive_scope' => $r['buddydrive_scope'], 'buddydrive_parent' => $r['buddydrive_parent'], 'exclude' => $r['exclude'], 'orderby' => $r['orderby'], 'order' => $r['order']));
        }
        do_action('buddydrive_has_items_catch_total_count', $buddydrive_template->query->found_posts);
    }
    return apply_filters('buddydrive_has_items', $buddydrive_template->have_posts());
}
 /**
  * Hook this extension's group tab into BuddyPress, if necessary
  *
  * @since BuddyPress (1.8)
  */
 protected function setup_display_hooks()
 {
     // Bail if not a group
     if (!bp_is_group()) {
         return;
     }
     // Bail if the current user doesn't have access
     if ('public' !== $this->visibility && !buddypress()->groups->current_group->user_has_access) {
         return;
     }
     if (true === $this->enable_nav_item) {
         bp_core_new_subnav_item(array('name' => !$this->nav_item_name ? $this->name : $this->nav_item_name, 'slug' => $this->slug, 'parent_slug' => bp_get_current_group_slug(), 'parent_url' => bp_get_group_permalink(groups_get_current_group()), 'position' => $this->nav_item_position, 'item_css_id' => 'nav-' . $this->slug, 'screen_function' => array(&$this, '_display_hook'), 'user_has_access' => $this->enable_nav_item));
         // When we are viewing the extension display page, set the title and options title
         if (bp_is_current_action($this->slug)) {
             add_action('bp_template_content_header', create_function('', 'echo "' . esc_attr($this->name) . '";'));
             add_action('bp_template_title', create_function('', 'echo "' . esc_attr($this->name) . '";'));
         }
     }
     // Hook the group home widget
     if (!bp_current_action() && bp_is_current_action('home')) {
         add_action($this->display_hook, array(&$this, 'widget_display'));
     }
 }
 /**
  * Constructor.
  *
  * @param array $args {
  *     An array of optional arguments.
  *     @type int $group_id ID of the group whose members are being
  *	     queried. Default: current group ID.
  *     @type int $page Page of results to be queried. Default: 1.
  *     @type int $per_page Number of items to return per page of
  *           results. Default: 20.
  *     @type int $max Optional. Max number of items to return.
  *     @type array $exclude Optional. Array of user IDs to exclude.
  *     @type bool|int True (or 1) to exclude admins and mods from
  *           results. Default: 1.
  *     @type bool|int True (or 1) to exclude banned users from results.
  *           Default: 1.
  *     @type array $group_role Optional. Array of group roles to include.
  *     @type string $search_terms Optional. Search terms to match.
  * }
  */
 function __construct($args = array())
 {
     // Backward compatibility with old method of passing arguments
     if (!is_array($args) || func_num_args() > 1) {
         _deprecated_argument(__METHOD__, '2.0.0', sprintf(__('Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress'), __METHOD__, __FILE__));
         $old_args_keys = array(0 => 'group_id', 1 => 'per_page', 2 => 'max', 3 => 'exclude_admins_mods', 4 => 'exclude_banned', 5 => 'exclude', 6 => 'group_role');
         $func_args = func_get_args();
         $args = bp_core_parse_args_array($old_args_keys, $func_args);
     }
     $r = wp_parse_args($args, array('group_id' => bp_get_current_group_id(), 'page' => 1, 'per_page' => 20, 'max' => false, 'exclude' => false, 'exclude_admins_mods' => 1, 'exclude_banned' => 1, 'group_role' => false, 'search_terms' => false, 'type' => 'last_joined'));
     // @todo No
     extract($r);
     $this->pag_page = isset($_REQUEST['mlpage']) ? intval($_REQUEST['mlpage']) : $r['page'];
     $this->pag_num = isset($_REQUEST['num']) ? intval($_REQUEST['num']) : $per_page;
     /**
      * Check the current group is the same as the supplied group ID.
      * It can differ when using {@link bp_group_has_members()} outside the Groups screens.
      */
     $current_group = groups_get_current_group();
     if (!$current_group || $current_group && $current_group->id !== bp_get_current_group_id()) {
         $current_group = groups_get_group(array('group_id' => $r['group_id']));
     }
     // Assemble the base URL for pagination
     $base_url = trailingslashit(bp_get_group_permalink($current_group) . bp_current_action());
     if (bp_action_variable()) {
         $base_url = trailingslashit($base_url . bp_action_variable());
     }
     $members_args = $r;
     $members_args['page'] = $this->pag_page;
     $members_args['per_page'] = $this->pag_num;
     $this->members = groups_get_group_members($members_args);
     if (!$max || $max >= (int) $this->members['count']) {
         $this->total_member_count = (int) $this->members['count'];
     } else {
         $this->total_member_count = (int) $max;
     }
     $this->members = $this->members['members'];
     if ($max) {
         if ($max >= count($this->members)) {
             $this->member_count = count($this->members);
         } else {
             $this->member_count = (int) $max;
         }
     } else {
         $this->member_count = count($this->members);
     }
     $this->pag_links = paginate_links(array('base' => add_query_arg(array('mlpage' => '%#%'), $base_url), 'format' => '', 'total' => !empty($this->pag_num) ? ceil($this->total_member_count / $this->pag_num) : $this->total_member_count, 'current' => $this->pag_page, 'prev_text' => '&larr;', 'next_text' => '&rarr;', 'mid_size' => 1));
 }
function invite_anyone_group_invite_form_action()
{
    $group_url = bp_get_group_permalink(groups_get_current_group());
    echo trailingslashit($group_url) . trailingslashit(BP_INVITE_ANYONE_SLUG) . trailingslashit('send');
}
/**
 *
 * @param type $group_id
 * @param type $user_id
 *
 * @return boolean
 */
function can_user_create_album_in_group($group_id = false, $user_id = false)
{
    if ($group_id == false) {
        $group = groups_get_current_group();
        $group_id = $group->id;
    }
    $upload_level = groups_get_groupmeta($group_id, "rt_media_group_control_level");
    if (empty($upload_level)) {
        $upload_level = groups_get_groupmeta($group_id, "bp_media_group_control_level");
        if (empty($upload_level)) {
            $upload_level = "all";
        }
    }
    $user_id = get_current_user_id();
    $display_flag = false;
    if (groups_is_user_member($user_id, $group_id)) {
        if ($upload_level == "admin") {
            if (groups_is_user_admin($user_id, $group_id) > 0) {
                $display_flag = true;
            }
        } else {
            if ($upload_level == "moderators") {
                if (groups_is_user_mod($user_id, $group_id) || groups_is_user_admin($user_id, $group_id)) {
                    $display_flag = true;
                }
            } else {
                $display_flag = true;
            }
        }
    }
    $display_flag = apply_filters('can_user_create_album_in_group', $display_flag);
    return $display_flag;
}
/**
 * Outputs the tabs at the top of the Docs view (All Docs, New Doc, etc)
 *
 * At the moment, the group-specific stuff is hard coded in here.
 * @todo Get the group stuff out
 */
function bp_docs_tabs($show_create_button = true)
{
    $current_view = '';
    ?>

	<ul id="bp-docs-all-docs">
		<li<?php 
    if (bp_docs_is_global_directory()) {
        ?>
 class="current"<?php 
    }
    ?>
><a href="<?php 
    bp_docs_archive_link();
    ?>
"><?php 
    _e('All Docs', 'bp-docs');
    ?>
</a></li>

		<?php 
    if (is_user_logged_in()) {
        ?>
			<?php 
        if (function_exists('bp_is_group') && bp_is_group()) {
            ?>
				<li<?php 
            if (bp_is_current_action('docs')) {
                ?>
 class="current"<?php 
            }
            ?>
><a href="<?php 
            bp_group_permalink(groups_get_current_group());
            bp_docs_slug();
            ?>
"><?php 
            printf(__("%s's Docs", 'bp-docs'), bp_get_current_group_name());
            ?>
</a></li>
			<?php 
        } else {
            ?>
				<li><a href="<?php 
            bp_docs_mydocs_started_link();
            ?>
"><?php 
            _e('Started By Me', 'bp-docs');
            ?>
</a></li>
				<li><a href="<?php 
            bp_docs_mydocs_edited_link();
            ?>
"><?php 
            _e('Edited By Me', 'bp-docs');
            ?>
</a></li>

				<?php 
            if (bp_is_active('groups')) {
                ?>
					<li<?php 
                if (bp_docs_is_mygroups_docs()) {
                    ?>
 class="current"<?php 
                }
                ?>
><a href="<?php 
                bp_docs_mygroups_link();
                ?>
"><?php 
                _e('My Groups', 'bp-docs');
                ?>
</a></li>
				<?php 
            }
            ?>
			<?php 
        }
        ?>

		<?php 
    }
    ?>

		<?php 
    if ($show_create_button) {
        ?>
			<?php 
        bp_docs_create_button();
        ?>
		<?php 
    }
    ?>

	</ul>
	<?php 
}
/**
 * Returns the slug of the current group
 *
 * @package BuddyPress
 * @since 1.5
 * @uses apply_filters() Filter bp_get_current_group_slug to modify this output
 *
 * @return str $current_group_slug The slug of the current group, if there is one
 */
function bp_get_current_group_slug()
{
    $current_group = groups_get_current_group();
    $current_group_slug = isset($current_group->slug) ? $current_group->slug : '';
    return apply_filters('bp_get_current_group_slug', $current_group_slug, $current_group);
}
 /**
  * Add custom template hierarchy to theme compat for group pages.
  *
  * This is to mirror how WordPress has
  * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
  *
  * @since BuddyPress (1.8.0)
  *
  * @param string $templates The templates from bp_get_theme_compat_templates().
  * @return array $templates Array of custom templates to look for.
  */
 public function single_template_hierarchy($templates)
 {
     // Setup some variables we're going to reference in our custom templates
     $group = groups_get_current_group();
     // Setup our templates based on priority
     $new_templates = apply_filters('bp_template_hierarchy_groups_single_item', array('groups/single/index-id-' . sanitize_file_name(bp_get_current_group_id()) . '.php', 'groups/single/index-slug-' . sanitize_file_name(bp_get_current_group_slug()) . '.php', 'groups/single/index-action-' . sanitize_file_name(bp_current_action()) . '.php', 'groups/single/index-status-' . sanitize_file_name($group->status) . '.php', 'groups/single/index.php'));
     // Merge new templates with existing stack
     // @see bp_get_theme_compat_templates()
     $templates = array_merge((array) $new_templates, $templates);
     return $templates;
 }
/**
 * Get a URL for a group component action.
 *
 * @since 1.2.0
 *
 * @param string $action
 * @param string $query_args
 * @param bool $nonce
 * @return string
 */
function bp_get_groups_action_link($action = '', $query_args = '', $nonce = false)
{
    $current_group = groups_get_current_group();
    $url = '';
    // Must be a group.
    if (!empty($current_group->id)) {
        // Append $action to $url if provided
        if (!empty($action)) {
            $url = bp_get_group_permalink($current_group) . $action;
        } else {
            $url = bp_get_group_permalink($current_group);
        }
        // Add a slash at the end of our user url.
        $url = trailingslashit($url);
        // Add possible query args.
        if (!empty($query_args) && is_array($query_args)) {
            $url = add_query_arg($query_args, $url);
        }
        // To nonce, or not to nonce...
        if (true === $nonce) {
            $url = wp_nonce_url($url);
        } elseif (is_string($nonce)) {
            $url = wp_nonce_url($url, $nonce);
        }
    }
    /**
     * Filters a URL for a group component action.
     *
     * @since 2.1.0
     *
     * @param string $url        URL for a group component action.
     * @param string $action     Action being taken for the group.
     * @param string $query_args Query arguments being passed.
     * @param bool   $nonce      Whether or not to add a nonce.
     */
    return apply_filters('bp_get_groups_action_link', $url, $action, $query_args, $nonce);
}
 /**
  * Save method for our extension during edits.
  *
  * @param int $group_id The group ID.
  */
 public function edit_screen_save($group_id = null)
 {
     if (!isset($_POST['save'])) {
         return false;
     }
     check_admin_referer('groups_edit_save_' . $this->slug);
     $existing_feeds = (array) groups_get_groupmeta(bp_get_current_group_id(), 'blogfeeds');
     $unfiltered_feeds = explode(',', $_POST['blogfeeds']);
     $blog_feeds = array();
     foreach ((array) $unfiltered_feeds as $blog_feed) {
         if (!empty($blog_feed)) {
             $blog_feeds[] = esc_url_raw(trim($blog_feed));
         }
     }
     /* Loop and find any feeds that have been removed, so we can delete activity stream items */
     if (!empty($existing_feeds)) {
         foreach ((array) $existing_feeds as $feed) {
             if (!in_array($feed, (array) $blog_feeds)) {
                 $removed[] = $feed;
             }
         }
     }
     if ($removed) {
         foreach ((array) $removed as $feed) {
             $existing = bp_activity_get(array('user_id' => false, 'component' => 'groups', 'type' => 'exb', 'item_id' => bp_get_current_group_id(), 'update_meta_cache' => false, 'display_comments' => false, 'meta_query' => array(array('key' => 'exb_feedurl', 'value' => trim($feed)))));
             // only delete items matching the feed
             if (!empty($existing['activities'])) {
                 $aids = wp_list_pluck($existing['activities'], 'id');
                 foreach ($aids as $aid) {
                     bp_activity_delete(array('id' => $aid));
                 }
                 // old way - delete all feed items matching the group
             } else {
                 bp_activity_delete(array('item_id' => bp_get_current_group_id(), 'component' => 'groups', 'type' => 'exb'));
             }
         }
     }
     groups_update_groupmeta(bp_get_current_group_id(), 'fetchtime', $_POST['fetch-time']);
     groups_update_groupmeta(bp_get_current_group_id(), 'blogfeeds', $blog_feeds);
     groups_update_groupmeta(bp_get_current_group_id(), 'bp_groupblogs_lastupdate', gmdate("Y-m-d H:i:s"));
     /* Re-fetch */
     bp_groupblogs_fetch_group_feeds(bp_get_current_group_id());
     bp_core_add_message(__('External blog feeds updated successfully!', 'bp-groups-externalblogs'));
     bp_core_redirect(bp_get_group_permalink(groups_get_current_group()) . '/admin/' . $this->slug);
 }
 function wds_metadesc()
 {
     if (is_admin()) {
         return false;
     }
     global $post, $wp_query;
     //global $wds_options;
     $wds_options = get_wds_options();
     if (is_singular()) {
         if (function_exists('groups_get_current_group') && 'groups' == bp_current_component() && ($group = groups_get_current_group())) {
             // BP group?
             $optvar = !empty($wds_options['metadesc-bp_groups']) ? $wds_options['metadesc-bp_groups'] : '';
             $metadesc = wds_replace_vars($optvar, array('name' => $group->name, 'description' => $group->description));
         } else {
             if (function_exists('bp_current_component') && 'profile' == bp_current_component()) {
                 $optvar = !empty($wds_options['metadesc-bp_profile']) ? $wds_options['metadesc-bp_profile'] : '';
                 $metadesc = wds_replace_vars($optvar, array('full_name' => bp_get_displayed_user_fullname(), 'username' => bp_get_displayed_user_username()));
             } else {
                 $metadesc = wds_get_value('metadesc');
                 if (empty($metadesc)) {
                     $optvar = !empty($wds_options['metadesc-' . $post->post_type]) ? $wds_options['metadesc-' . $post->post_type] : '';
                     $metadesc = wds_replace_vars($optvar, (array) $post);
                 }
             }
         }
     } else {
         if (function_exists('is_shop') && is_shop() && function_exists('woocommerce_get_page_id')) {
             // WooCommerce shop page
             $post_id = woocommerce_get_page_id('shop');
             $metadesc = wds_get_value('metadesc', $post_id);
             if (empty($metadesc)) {
                 $optvar = !empty($wds_options['metadesc-' . $post->post_type]) ? $wds_options['metadesc-' . $post->post_type] : '';
                 $metadesc = wds_replace_vars($optvar, (array) $post);
             }
         } else {
             if (is_home() && 'posts' == get_option('show_on_front') && isset($wds_options['metadesc-home'])) {
                 $metadesc = wds_replace_vars($wds_options['metadesc-home'], array());
             } else {
                 if (is_home() && 'posts' != get_option('show_on_front')) {
                     $post = get_post(get_option('page_for_posts'));
                     $metadesc = wds_get_value('metadesc');
                     if (($metadesc == '' || !$metadesc) && isset($wds_options['metadesc-' . $post->post_type])) {
                         $metadesc = wds_replace_vars($wds_options['metadesc-' . $post->post_type], (array) $post);
                     }
                 } else {
                     if (is_category() || is_tag() || is_tax()) {
                         $term = $wp_query->get_queried_object();
                         $metadesc = wds_get_term_meta($term, $term->taxonomy, 'wds_desc');
                         if (!$metadesc && isset($wds_options['metadesc-' . $term->taxonomy])) {
                             $metadesc = wds_replace_vars($wds_options['metadesc-' . $term->taxonomy], (array) $term);
                         }
                     } else {
                         if (is_author()) {
                             $author_id = get_query_var('author');
                             $metadesc = get_the_author_meta('wds_metadesc', $author_id);
                         } else {
                             if (function_exists('groups_get_current_group') && 'groups' == bp_current_component() && ($group = groups_get_current_group())) {
                                 // BP group?
                                 $optvar = !empty($wds_options['metadesc-bp_groups']) ? $wds_options['metadesc-bp_groups'] : '';
                                 $metadesc = wds_replace_vars($optvar, array('name' => $group->name, 'description' => $group->description));
                             } else {
                                 if (function_exists('bp_current_component') && 'profile' == bp_current_component()) {
                                     $optvar = !empty($wds_options['metadesc-bp_profile']) ? $wds_options['metadesc-bp_profile'] : '';
                                     $metadesc = wds_replace_vars($optvar, array('full_name' => bp_get_displayed_user_fullname(), 'username' => bp_get_displayed_user_username()));
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     if (!empty($metadesc)) {
         echo "\t" . '<meta name="description" content="' . esc_attr(strip_tags(stripslashes(apply_filters('wds_metadesc', $metadesc)))) . '" />' . "\n";
     }
 }
/**
 * Customize the body class, according to the currently displayed BP content.
 *
 * Uses the above is_() functions to output a body class for each scenario.
 *
 * @since 1.1.0
 *
 * @param array      $wp_classes     The body classes coming from WP.
 * @param array|bool $custom_classes Classes that were passed to get_body_class().
 * @return array $classes The BP-adjusted body classes.
 */
function bp_get_the_body_class($wp_classes = array(), $custom_classes = false)
{
    $bp_classes = array();
    /* Pages *************************************************************/
    if (is_front_page()) {
        $bp_classes[] = 'home-page';
    }
    if (bp_is_directory()) {
        $bp_classes[] = 'directory';
    }
    if (bp_is_single_item()) {
        $bp_classes[] = 'single-item';
    }
    /* Components ********************************************************/
    if (!bp_is_blog_page()) {
        if (bp_is_user_profile()) {
            $bp_classes[] = 'xprofile';
        }
        if (bp_is_activity_component()) {
            $bp_classes[] = 'activity';
        }
        if (bp_is_blogs_component()) {
            $bp_classes[] = 'blogs';
        }
        if (bp_is_messages_component()) {
            $bp_classes[] = 'messages';
        }
        if (bp_is_friends_component()) {
            $bp_classes[] = 'friends';
        }
        if (bp_is_groups_component()) {
            $bp_classes[] = 'groups';
        }
        if (bp_is_settings_component()) {
            $bp_classes[] = 'settings';
        }
    }
    /* User **************************************************************/
    if (bp_is_user()) {
        $bp_classes[] = 'bp-user';
        // Add current user member types.
        if ($member_types = bp_get_member_type(bp_displayed_user_id(), false)) {
            foreach ($member_types as $member_type) {
                $bp_classes[] = sprintf('member-type-%s', esc_attr($member_type));
            }
        }
    }
    if (!bp_is_directory()) {
        if (bp_is_user_blogs()) {
            $bp_classes[] = 'my-blogs';
        }
        if (bp_is_user_groups()) {
            $bp_classes[] = 'my-groups';
        }
        if (bp_is_user_activity()) {
            $bp_classes[] = 'my-activity';
        }
    } else {
        if (bp_get_current_member_type()) {
            $bp_classes[] = 'type';
        }
    }
    if (bp_is_my_profile()) {
        $bp_classes[] = 'my-account';
    }
    if (bp_is_user_profile()) {
        $bp_classes[] = 'my-profile';
    }
    if (bp_is_user_friends()) {
        $bp_classes[] = 'my-friends';
    }
    if (bp_is_user_messages()) {
        $bp_classes[] = 'my-messages';
    }
    if (bp_is_user_recent_commments()) {
        $bp_classes[] = 'recent-comments';
    }
    if (bp_is_user_recent_posts()) {
        $bp_classes[] = 'recent-posts';
    }
    if (bp_is_user_change_avatar()) {
        $bp_classes[] = 'change-avatar';
    }
    if (bp_is_user_profile_edit()) {
        $bp_classes[] = 'profile-edit';
    }
    if (bp_is_user_friends_activity()) {
        $bp_classes[] = 'friends-activity';
    }
    if (bp_is_user_groups_activity()) {
        $bp_classes[] = 'groups-activity';
    }
    /* Messages **********************************************************/
    if (bp_is_messages_inbox()) {
        $bp_classes[] = 'inbox';
    }
    if (bp_is_messages_sentbox()) {
        $bp_classes[] = 'sentbox';
    }
    if (bp_is_messages_compose_screen()) {
        $bp_classes[] = 'compose';
    }
    if (bp_is_notices()) {
        $bp_classes[] = 'notices';
    }
    if (bp_is_user_friend_requests()) {
        $bp_classes[] = 'friend-requests';
    }
    if (bp_is_create_blog()) {
        $bp_classes[] = 'create-blog';
    }
    /* Groups ************************************************************/
    if (bp_is_group()) {
        $bp_classes[] = 'group-' . groups_get_current_group()->slug;
        // Add current group types.
        if ($group_types = bp_groups_get_group_type(bp_get_current_group_id(), false)) {
            foreach ($group_types as $group_type) {
                $bp_classes[] = sprintf('group-type-%s', esc_attr($group_type));
            }
        }
    }
    if (bp_is_group_leave()) {
        $bp_classes[] = 'leave-group';
    }
    if (bp_is_group_invites()) {
        $bp_classes[] = 'group-invites';
    }
    if (bp_is_group_members()) {
        $bp_classes[] = 'group-members';
    }
    if (bp_is_group_forum_topic()) {
        $bp_classes[] = 'group-forum-topic';
    }
    if (bp_is_group_forum_topic_edit()) {
        $bp_classes[] = 'group-forum-topic-edit';
    }
    if (bp_is_group_forum()) {
        $bp_classes[] = 'group-forum';
    }
    if (bp_is_group_admin_page()) {
        $bp_classes[] = 'group-admin';
        $bp_classes[] = bp_get_group_current_admin_tab();
    }
    if (bp_is_group_create()) {
        $bp_classes[] = 'group-create';
        $bp_classes[] = bp_get_groups_current_create_step();
    }
    if (bp_is_group_home()) {
        $bp_classes[] = 'group-home';
    }
    if (bp_is_single_activity()) {
        $bp_classes[] = 'activity-permalink';
    }
    /* Registration ******************************************************/
    if (bp_is_register_page()) {
        $bp_classes[] = 'registration';
    }
    if (bp_is_activation_page()) {
        $bp_classes[] = 'activation';
    }
    /* Current Component & Action ****************************************/
    if (!bp_is_blog_page()) {
        $bp_classes[] = bp_current_component();
        $bp_classes[] = bp_current_action();
    }
    /* Clean up ***********************************************************/
    // Add BuddyPress class if we are within a BuddyPress page.
    if (!bp_is_blog_page()) {
        $bp_classes[] = 'buddypress';
    }
    // Merge WP classes with BuddyPress classes and remove any duplicates.
    $classes = array_unique(array_merge((array) $bp_classes, (array) $wp_classes));
    /**
     * Filters the BuddyPress classes to be added to body_class()
     *
     * @since 1.1.0
     *
     * @param array $classes        Array of body classes to add.
     * @param array $bp_classes     Array of BuddyPress-based classes.
     * @param array $wp_classes     Array of WordPress-based classes.
     * @param array $custom_classes Array of classes that were passed to get_body_class().
     */
    return apply_filters('bp_get_the_body_class', $classes, $bp_classes, $wp_classes, $custom_classes);
}