/**
 * Locate a custom group front template if it exists.
 *
 * @since 2.4.0
 * @since 2.6.0 Adds the Group Type to the front template hierarchy.
 *
 * @param  BP_Groups_Group|null $group Optional. Falls back to current group if not passed.
 * @return string|bool                 Path to front template on success; boolean false on failure.
 */
function bp_groups_get_front_template($group = null)
{
    if (!is_a($group, 'BP_Groups_Group')) {
        $group = groups_get_current_group();
    }
    if (!isset($group->id)) {
        return false;
    }
    if (isset($group->front_template)) {
        return $group->front_template;
    }
    $template_names = array('groups/single/front-id-' . sanitize_file_name($group->id) . '.php', 'groups/single/front-slug-' . sanitize_file_name($group->slug) . '.php');
    if (bp_groups_get_group_types()) {
        $group_type = bp_groups_get_group_type($group->id);
        if (!$group_type) {
            $group_type = 'none';
        }
        $template_names[] = 'groups/single/front-group-type-' . sanitize_file_name($group_type) . '.php';
    }
    $template_names = array_merge($template_names, array('groups/single/front-status-' . sanitize_file_name($group->status) . '.php', 'groups/single/front.php'));
    /**
     * Filters the hierarchy of group front templates corresponding to a specific group.
     *
     * @since 2.4.0
     * @since 2.5.0 Added the `$group` parameter.
     *
     * @param array  $template_names Array of template paths.
     * @param object $group          Group object.
     */
    return bp_locate_template(apply_filters('bp_groups_get_front_template', $template_names, $group), false, true);
}
/**
 * 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);
}
/**
 * Process input from the Group Type bulk change select.
 *
 * @since 2.7.0
 *
 * @param string $doaction Current $_GET action being performed in admin screen.
 */
function bp_groups_admin_process_group_type_bulk_changes($doaction)
{
    // Bail if no groups are specified or if this isn't a relevant action.
    if (empty($_REQUEST['gid']) || empty($_REQUEST['bp_change_type']) && empty($_REQUEST['bp_change_type2']) || empty($_REQUEST['bp_change_group_type'])) {
        return;
    }
    // Bail if nonce check fails.
    check_admin_referer('bp-bulk-groups-change-type-' . bp_loggedin_user_id(), 'bp-bulk-groups-change-type-nonce');
    if (!bp_current_user_can('bp_moderate')) {
        return;
    }
    $new_type = '';
    if (!empty($_REQUEST['bp_change_type2'])) {
        $new_type = sanitize_text_field($_REQUEST['bp_change_type2']);
    } elseif (!empty($_REQUEST['bp_change_type'])) {
        $new_type = sanitize_text_field($_REQUEST['bp_change_type']);
    }
    // Check that the selected type actually exists.
    if ('remove_group_type' !== $new_type && null === bp_groups_get_group_type_object($new_type)) {
        $error = true;
    } else {
        // Run through group ids.
        $error = false;
        foreach ((array) $_REQUEST['gid'] as $group_id) {
            $group_id = (int) $group_id;
            // Get the old group type to check against.
            $group_type = bp_groups_get_group_type($group_id);
            if ('remove_group_type' === $new_type) {
                // Remove the current group type, if there's one to remove.
                if ($group_type) {
                    $removed = bp_groups_remove_group_type($group_id, $group_type);
                    if (false === $removed || is_wp_error($removed)) {
                        $error = true;
                    }
                }
            } else {
                // Set the new group type.
                if ($new_type !== $group_type) {
                    $set = bp_groups_set_group_type($group_id, $new_type);
                    if (false === $set || is_wp_error($set)) {
                        $error = true;
                    }
                }
            }
        }
    }
    // If there were any errors, show the error message.
    if ($error) {
        $redirect = add_query_arg(array('updated' => 'group-type-change-error'), wp_get_referer());
    } else {
        $redirect = add_query_arg(array('updated' => 'group-type-change-success'), wp_get_referer());
    }
    wp_redirect($redirect);
    exit;
}
/**
 * Check whether the given group has a certain group type.
 *
 * @since 2.6.0
 *
 * @param  int    $group_id   ID of the group.
 * @param  string $group_type Group type.
 * @return bool   Whether the group has the give group type.
 */
function bp_groups_has_group_type($group_id, $group_type)
{
    if (empty($group_type) || !bp_groups_get_group_type_object($group_type)) {
        return false;
    }
    // Get all group's group types.
    $types = bp_groups_get_group_type($group_id, false);
    if (!is_array($types)) {
        return false;
    }
    return in_array($group_type, $types);
}
Example #5
0
 public function test_bp_groups_set_group_type_should_set_multiple_types_when_passing_array_of_types()
 {
     $g = $this->factory->group->create(array('creator_id' => self::$u1));
     bp_groups_register_group_type('foo');
     bp_groups_register_group_type('bar');
     // Set multiple group types.
     $types = array('foo', 'bar');
     bp_groups_set_group_type($g, $types);
     // Assert!
     $this->assertEqualSets($types, bp_groups_get_group_type($g, false));
 }
/**
 * Handle the display of a group's admin/group-settings page.
 *
 * @since 1.0.0
 */
function groups_screen_group_admin_settings()
{
    if ('group-settings' != bp_get_group_current_admin_tab()) {
        return false;
    }
    if (!bp_is_item_admin()) {
        return false;
    }
    $bp = buddypress();
    // If the edit form has been submitted, save the edited details.
    if (isset($_POST['save'])) {
        $enable_forum = isset($_POST['group-show-forum']) ? 1 : 0;
        // Checked against a whitelist for security.
        /** This filter is documented in bp-groups/bp-groups-admin.php */
        $allowed_status = apply_filters('groups_allowed_status', array('public', 'private', 'hidden'));
        $status = in_array($_POST['group-status'], (array) $allowed_status) ? $_POST['group-status'] : 'public';
        // Checked against a whitelist for security.
        /** This filter is documented in bp-groups/bp-groups-admin.php */
        $allowed_invite_status = apply_filters('groups_allowed_invite_status', array('members', 'mods', 'admins'));
        $invite_status = isset($_POST['group-invite-status']) && in_array($_POST['group-invite-status'], (array) $allowed_invite_status) ? $_POST['group-invite-status'] : 'members';
        // Check the nonce.
        if (!check_admin_referer('groups_edit_group_settings')) {
            return false;
        }
        /*
         * Save group types.
         *
         * Ensure we keep types that have 'show_in_create_screen' set to false.
         */
        $current_types = bp_groups_get_group_type(bp_get_current_group_id(), false);
        $current_types = array_intersect(bp_groups_get_group_types(array('show_in_create_screen' => false)), (array) $current_types);
        if (isset($_POST['group-types'])) {
            $current_types = array_merge($current_types, $_POST['group-types']);
            // Set group types.
            bp_groups_set_group_type(bp_get_current_group_id(), $current_types);
            // No group types checked, so this means we want to wipe out all group types.
        } else {
            /*
             * Passing a blank string will wipe out all types for the group.
             *
             * Ensure we keep types that have 'show_in_create_screen' set to false.
             */
            $current_types = empty($current_types) ? '' : $current_types;
            // Set group types.
            bp_groups_set_group_type(bp_get_current_group_id(), $current_types);
        }
        if (!groups_edit_group_settings($_POST['group-id'], $enable_forum, $status, $invite_status)) {
            bp_core_add_message(__('There was an error updating group settings. Please try again.', 'buddypress'), 'error');
        } else {
            bp_core_add_message(__('Group settings were successfully updated.', 'buddypress'));
        }
        /**
         * Fires before the redirect if a group settings has been edited and saved.
         *
         * @since 1.0.0
         *
         * @param int $id ID of the group that was edited.
         */
        do_action('groups_group_settings_edited', $bp->groups->current_group->id);
        bp_core_redirect(bp_get_group_permalink(groups_get_current_group()) . 'admin/group-settings/');
    }
    /**
     * Fires before the loading of the group admin/group-settings page template.
     *
     * @since 1.0.0
     *
     * @param int $id ID of the group that is being displayed.
     */
    do_action('groups_screen_group_admin_settings', $bp->groups->current_group->id);
    /**
     * Filters the template to load for a group's admin/group-settings page.
     *
     * @since 1.0.0
     *
     * @param string $value Path to a group's admin/group-settings template.
     */
    bp_core_load_template(apply_filters('groups_template_group_admin_settings', 'groups/single/home'));
}