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