function bp_dtheme_ajax_invite_user() { global $bp; check_ajax_referer('groups_invite_uninvite_user'); if (!$_POST['friend_id'] || !$_POST['friend_action'] || !$_POST['group_id']) { return false; } if (!bp_groups_user_can_send_invites($_POST['group_id']) || !friends_check_friendship($bp->loggedin_user->id, $_POST['friend_id'])) { return false; } if ('invite' == $_POST['friend_action']) { if (!groups_invite_user(array('user_id' => $_POST['friend_id'], 'group_id' => $_POST['group_id']))) { return false; } $user = new BP_Core_User($_POST['friend_id']); echo '<li id="uid-' . $user->id . '">'; echo $user->avatar_thumb; echo '<h4>' . $user->user_link . '</h4>'; echo '<span class="activity">' . esc_attr($user->last_active) . '</span>'; echo '<div class="action"> <a class="button remove" href="' . wp_nonce_url($bp->loggedin_user->domain . bp_get_groups_slug() . '/' . $_POST['group_id'] . '/invites/remove/' . $user->id, 'groups_invite_uninvite_user') . '" id="uid-' . esc_attr($user->id) . '">' . __('Remove Invite', 'buddypress') . '</a> </div>'; echo '</li>'; } else { if ('uninvite' == $_POST['friend_action']) { return (bool) groups_uninvite_user($_POST['friend_id'], $_POST['group_id']); } else { return false; } } }
/** * Invites a friend to join a group via a POST request. * * @since BuddyPress (1.2) * @todo Audit return types */ function bp_legacy_theme_ajax_invite_user() { // Bail if not a POST action if ('POST' !== strtoupper($_SERVER['REQUEST_METHOD'])) { return; } check_ajax_referer('groups_invite_uninvite_user'); if (!$_POST['friend_id'] || !$_POST['friend_action'] || !$_POST['group_id']) { return; } if (!bp_groups_user_can_send_invites($_POST['group_id'])) { return; } if (!friends_check_friendship(bp_loggedin_user_id(), $_POST['friend_id'])) { return; } $group_id = (int) $_POST['group_id']; $friend_id = (int) $_POST['friend_id']; if ('invite' == $_POST['friend_action']) { $group = groups_get_group($group_id); // Users who have previously requested membership do not need // another invitation created for them if (BP_Groups_Member::check_for_membership_request($friend_id, $group_id)) { $user_status = 'is_pending'; // Create the user invitation } elseif (groups_invite_user(array('user_id' => $friend_id, 'group_id' => $group_id))) { $user_status = 'is_invited'; // Miscellaneous failure } else { return; } $user = new BP_Core_User($friend_id); $uninvite_url = bp_is_current_action('create') ? bp_get_groups_directory_permalink() . 'create/step/group-invites/?user_id=' . $friend_id : bp_get_group_permalink($group) . 'send-invites/remove/' . $friend_id; echo '<li id="uid-' . esc_attr($user->id) . '">'; echo $user->avatar_thumb; echo '<h4>' . $user->user_link . '</h4>'; echo '<span class="activity">' . esc_attr($user->last_active) . '</span>'; echo '<div class="action"> <a class="button remove" href="' . wp_nonce_url($uninvite_url, 'groups_invite_uninvite_user') . '" id="uid-' . esc_attr($user->id) . '">' . __('Remove Invite', 'buddypress') . '</a> </div>'; if ('is_pending' == $user_status) { echo '<p class="description">' . sprintf(__('%s has previously requested to join this group. Sending an invitation will automatically add the member to the group.', 'buddypress'), $user->user_link) . '</p>'; } echo '</li>'; exit; } elseif ('uninvite' == $_POST['friend_action']) { // Users who have previously requested membership should not // have their requests deleted on the "uninvite" action if (BP_Groups_Member::check_for_membership_request($friend_id, $group_id)) { return; } // Remove the unsent invitation if (!groups_uninvite_user($friend_id, $group_id)) { return; } exit; } else { return; } }
function enable_nav_item() { global $bp; // Group-specific settings always override if (!bp_groups_user_can_send_invites()) { return false; } if (invite_anyone_group_invite_access_test() == 'anyone') { return true; } else { return false; } }
/** * Invites a friend to join a group via a POST request. * * @return unknown * @since BuddyPress (1.2) * @todo Audit return types */ function bp_dtheme_ajax_invite_user() { // Bail if not a POST action if ('POST' !== strtoupper($_SERVER['REQUEST_METHOD'])) { return; } check_ajax_referer('groups_invite_uninvite_user'); if (!$_POST['friend_id'] || !$_POST['friend_action'] || !$_POST['group_id']) { return; } if (!bp_groups_user_can_send_invites($_POST['group_id'])) { return; } if (!friends_check_friendship(bp_loggedin_user_id(), $_POST['friend_id'])) { return; } if ('invite' == $_POST['friend_action']) { if (!groups_invite_user(array('user_id' => $_POST['friend_id'], 'group_id' => $_POST['group_id']))) { return; } $user = new BP_Core_User($_POST['friend_id']); echo '<li id="uid-' . $user->id . '">'; echo $user->avatar_thumb; echo '<h4>' . $user->user_link . '</h4>'; echo '<span class="activity">' . esc_attr($user->last_active) . '</span>'; echo '<div class="action"> <a class="button remove" href="' . wp_nonce_url(bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . $_POST['group_id'] . '/invites/remove/' . $user->id, 'groups_invite_uninvite_user') . '" id="uid-' . esc_attr($user->id) . '">' . __('Remove Invite', 'logicalboneshug') . '</a> </div>'; echo '</li>'; exit; } elseif ('uninvite' == $_POST['friend_action']) { if (!groups_uninvite_user($_POST['friend_id'], $_POST['group_id'])) { return; } exit; } else { return; } }
/** * Process group invitation removal requests. * * Note that this function is only used when JS is disabled. Normally, clicking * Remove Invite removes the invitation via AJAX. * * @since 2.0.0 */ function groups_remove_group_invite() { if (!bp_is_group_invites()) { return; } if (!bp_is_action_variable('remove', 0) || !is_numeric(bp_action_variable(1))) { return; } if (!check_admin_referer('groups_invite_uninvite_user')) { return false; } $friend_id = intval(bp_action_variable(1)); $group_id = bp_get_current_group_id(); $message = __('Invite successfully removed', 'buddypress'); $redirect = wp_get_referer(); $error = false; if (!bp_groups_user_can_send_invites($group_id)) { $message = __('You are not allowed to send or remove invites', 'buddypress'); $error = 'error'; } elseif (BP_Groups_Member::check_for_membership_request($friend_id, $group_id)) { $message = __('The member requested to join the group', 'buddypress'); $error = 'error'; } elseif (!groups_uninvite_user($friend_id, $group_id)) { $message = __('There was an error removing the invite', 'buddypress'); $error = 'error'; } bp_core_add_message($message, $error); bp_core_redirect($redirect); }
function invite_anyone_screen_one_content() { global $bp; $iaoptions = invite_anyone_options(); // Hack - catch already=accepted if (!empty($_GET['already']) && 'accepted' === $_GET['already'] && bp_is_my_profile()) { _e('It looks like you’ve already accepted your invitation to join the site.', 'invite-anyone'); return; } // If the user has maxed out his invites, no need to go on if (!empty($iaoptions['email_limit_invites_toggle']) && $iaoptions['email_limit_invites_toggle'] == 'yes' && !current_user_can('delete_others_pages')) { $sent_invites = invite_anyone_get_invitations_by_inviter_id(bp_displayed_user_id()); $sent_invites_count = $sent_invites->post_count; if ($sent_invites_count >= $iaoptions['limit_invites_per_user']) { ?> <h4><?php _e('Invite New Members', 'invite-anyone'); ?> </h4> <p id="welcome-message"><?php _e('You have sent the maximum allowed number of invitations.', 'invite-anyone'); ?> </em></p> <?php return; } } if (!($max_invites = $iaoptions['max_invites'])) { $max_invites = 5; } $from_group = false; if (!empty($bp->action_variables)) { if ('group-invites' == $bp->action_variables[0]) { $from_group = $bp->action_variables[1]; } } $returned_data = !empty($bp->invite_anyone->returned_data) ? $bp->invite_anyone->returned_data : false; /* If the user is coming from the widget, $returned_emails is populated with those email addresses */ if (isset($_POST['invite_anyone_widget'])) { check_admin_referer('invite-anyone-widget_' . $bp->loggedin_user->id); if (!empty($_POST['invite_anyone_email_addresses'])) { $returned_data['error_emails'] = invite_anyone_parse_addresses($_POST['invite_anyone_email_addresses']); } /* If the widget appeared on a group page, the group ID should come along with it too */ if (isset($_POST['invite_anyone_widget_group'])) { $returned_data['groups'] = $_POST['invite_anyone_widget_group']; } } // $returned_groups is padded so that array_search (below) returns true for first group */ $counter = 0; $returned_groups = array(0); if (!empty($returned_data['groups'])) { foreach ($returned_data['groups'] as $group_id) { $returned_groups[] = $group_id; } } // Get the returned email subject, if there is one $returned_subject = !empty($returned_data['subject']) ? stripslashes($returned_data['subject']) : false; // Get the returned email message, if there is one $returned_message = !empty($returned_data['message']) ? stripslashes($returned_data['message']) : false; if (!empty($returned_data['error_message'])) { ?> <div class="invite-anyone-error error"> <p><?php _e("Some of your invitations were not sent. Please see the errors below and resubmit the failed invitations.", 'invite-anyone'); ?> </p> </div> <?php } $blogname = get_bloginfo('name'); $welcome_message = sprintf(__('Invite friends to join %s by following these steps:', 'invite-anyone'), $blogname); ?> <form id="invite-anyone-by-email" action="<?php echo $bp->displayed_user->domain . $bp->invite_anyone->slug . '/sent-invites/send/'; ?> " method="post"> <h4><?php _e('Invite New Members', 'invite-anyone'); ?> </h4> <?php if (isset($iaoptions['email_limit_invites_toggle']) && $iaoptions['email_limit_invites_toggle'] == 'yes' && !current_user_can('delete_others_pages')) { if (!isset($sent_invites)) { $sent_invites = invite_anyone_get_invitations_by_inviter_id(bp_loggedin_user_id()); $sent_invites_count = $sent_invites->post_count; } $limit_invite_count = (int) $iaoptions['limit_invites_per_user'] - (int) $sent_invites_count; if ($limit_invite_count < 0) { $limit_invite_count = 0; } ?> <p class="description"><?php printf(__('The site administrator has limited each user to %1$d invitations. You have %2$d invitations remaining.', 'invite-anyone'), (int) $iaoptions['limit_invites_per_user'], (int) $limit_invite_count); ?> </p> <?php } ?> <p id="welcome-message"><?php echo $welcome_message; ?> </p> <ol id="invite-anyone-steps"> <li> <?php if (!empty($returned_data['error_message'])) { ?> <div class="invite-anyone-error error"> <p><?php echo $returned_data['error_message']; ?> </p> </div> <?php } ?> <div class="manual-email"> <p> <?php _e('Enter email addresses below, one per line.', 'invite-anyone'); ?> <?php if (invite_anyone_allowed_domains()) { ?> <?php _e('You can only invite people whose email addresses end in one of the following domains:', 'invite-anyone'); ?> <?php echo invite_anyone_allowed_domains(); } ?> </p> <?php if (false !== ($max_no_invites = invite_anyone_max_invites())) { ?> <p class="description"><?php printf(__('You can invite a maximum of %s people at a time.', 'invite-anyone'), $max_no_invites); ?> </p> <?php } ?> <?php invite_anyone_email_fields($returned_data['error_emails']); ?> </div> <?php /* invite_anyone_after_addresses gets $iaoptions so that Cloudsponge etc can tell whether certain components are activated, without an additional lookup */ ?> <?php do_action('invite_anyone_after_addresses', $iaoptions); ?> </li> <li> <?php if ($iaoptions['subject_is_customizable'] == 'yes') { ?> <label for="invite-anyone-custom-subject"><?php _e('(optional) Customize the subject line of the invitation email.', 'invite-anyone'); ?> </label> <textarea name="invite_anyone_custom_subject" id="invite-anyone-custom-subject" rows="15" cols="10" ><?php echo invite_anyone_invitation_subject($returned_subject); ?> </textarea> <?php } else { ?> <label for="invite-anyone-custom-subject"><?php _e('Subject: <span class="disabled-subject">Subject line is fixed</span>', 'invite-anyone'); ?> </label> <textarea name="invite_anyone_custom_subject" id="invite-anyone-custom-subject" rows="15" cols="10" disabled="disabled"><?php echo invite_anyone_invitation_subject($returned_subject); ?> </textarea> <input type="hidden" id="invite-anyone-customised-subject" name="invite_anyone_custom_subject" value="<?php echo invite_anyone_invitation_subject(); ?> " /> <?php } ?> </li> <li> <?php if ($iaoptions['message_is_customizable'] == 'yes') { ?> <label for="invite-anyone-custom-message"><?php _e('(optional) Customize the text of the invitation.', 'invite-anyone'); ?> </label> <p class="description"><?php _e('The message will also contain a custom footer containing links to accept the invitation or opt out of further email invitations from this site.', 'invite-anyone'); ?> </p> <textarea name="invite_anyone_custom_message" id="invite-anyone-custom-message" cols="40" rows="10"><?php echo invite_anyone_invitation_message($returned_message); ?> </textarea> <?php } else { ?> <label for="invite-anyone-custom-message"><?php _e('Message:', 'invite-anyone'); ?> </label> <textarea name="invite_anyone_custom_message" id="invite-anyone-custom-message" disabled="disabled"><?php echo invite_anyone_invitation_message($returned_message); ?> </textarea> <input type="hidden" name="invite_anyone_custom_message" value="<?php echo invite_anyone_invitation_message(); ?> " /> <?php } ?> </li> <?php if (invite_anyone_are_groups_running()) { ?> <?php if ($iaoptions['can_send_group_invites_email'] == 'yes' && bp_has_groups("per_page=10000&type=alphabetical&user_id=" . bp_loggedin_user_id())) { ?> <li> <p><?php _e('(optional) Select some groups. Invitees will receive invitations to these groups when they join the site.', 'invite-anyone'); ?> </p> <ul id="invite-anyone-group-list"> <?php while (bp_groups()) { bp_the_group(); ?> <?php // Enforce per-group invitation settings if (!bp_groups_user_can_send_invites(bp_get_group_id()) || 'anyone' !== invite_anyone_group_invite_access_test(bp_get_group_id())) { continue; } ?> <li> <input type="checkbox" name="invite_anyone_groups[]" id="invite_anyone_groups-<?php bp_group_id(); ?> " value="<?php bp_group_id(); ?> " <?php if ($from_group == bp_get_group_id() || array_search(bp_get_group_id(), $returned_groups)) { ?> checked<?php } ?> /> <label for="invite_anyone_groups-<?php bp_group_id(); ?> " class="invite-anyone-group-name"><?php bp_group_avatar_mini(); ?> <span><?php bp_group_name(); ?> </span></label> </li> <?php } ?> </ul> </li> <?php } ?> <?php } ?> <?php do_action('invite_anyone_addl_fields'); ?> </ol> <div class="submit"> <input type="submit" name="invite-anyone-submit" id="invite-anyone-submit" value="<?php _e('Send Invites', 'buddypress'); ?> " /> </div> </form> <?php }
/** * Set up component navigation. * * @since 1.5.0 * * @see BP_Component::setup_nav() for a description of arguments. * * @param array $main_nav Optional. See BP_Component::setup_nav() for description. * @param array $sub_nav Optional. See BP_Component::setup_nav() for description. */ public function setup_nav($main_nav = array(), $sub_nav = array()) { // Determine user to use. if (bp_displayed_user_domain()) { $user_domain = bp_displayed_user_domain(); } elseif (bp_loggedin_user_domain()) { $user_domain = bp_loggedin_user_domain(); } else { $user_domain = false; } // Only grab count if we're on a user page. if (bp_is_user()) { $count = bp_get_total_group_count_for_user(); $class = 0 === $count ? 'no-count' : 'count'; $nav_name = sprintf(_x('Groups <span class="%s">%s</span>', 'Group screen nav with counter', 'buddypress'), esc_attr($class), bp_core_number_format($count)); } else { $nav_name = _x('Groups', 'Group screen nav without counter', 'buddypress'); } $slug = bp_get_groups_slug(); // Add 'Groups' to the main navigation. $main_nav = array('name' => $nav_name, 'slug' => $slug, 'position' => 70, 'screen_function' => 'groups_screen_my_groups', 'default_subnav_slug' => 'my-groups', 'item_css_id' => $this->id); if (!empty($user_domain)) { $access = bp_core_can_edit_settings(); $groups_link = trailingslashit($user_domain . $slug); // Add the My Groups nav item. $sub_nav[] = array('name' => __('Memberships', 'buddypress'), 'slug' => 'my-groups', 'parent_url' => $groups_link, 'parent_slug' => $slug, 'screen_function' => 'groups_screen_my_groups', 'position' => 10, 'item_css_id' => 'groups-my-groups'); // Add the Group Invites nav item. $sub_nav[] = array('name' => __('Invitations', 'buddypress'), 'slug' => 'invites', 'parent_url' => $groups_link, 'parent_slug' => $slug, 'screen_function' => 'groups_screen_group_invites', 'user_has_access' => $access, 'position' => 30); parent::setup_nav($main_nav, $sub_nav); } if (bp_is_groups_component() && bp_is_single_item()) { // Reset sub nav. $sub_nav = array(); // Add 'Groups' to the main navigation. $main_nav = array('name' => __('Memberships', 'buddypress'), 'slug' => $this->current_group->slug, 'position' => -1, 'screen_function' => 'groups_screen_group_home', 'default_subnav_slug' => $this->default_extension, 'item_css_id' => $this->id); $group_link = bp_get_group_permalink($this->current_group); // Add the "Home" subnav item, as this will always be present. $sub_nav[] = array('name' => _x('Home', 'Group screen navigation title', 'buddypress'), 'slug' => 'home', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_home', 'position' => 10, 'item_css_id' => 'home'); // If this is a private group, and the user is not a // member and does not have an outstanding invitation, // show a "Request Membership" nav item. if (is_user_logged_in() && !$this->current_group->is_user_member && !groups_check_for_membership_request(bp_loggedin_user_id(), $this->current_group->id) && $this->current_group->status == 'private' && !groups_check_user_has_invite(bp_loggedin_user_id(), $this->current_group->id)) { $sub_nav[] = array('name' => _x('Request Membership', 'Group screen nav', 'buddypress'), 'slug' => 'request-membership', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_request_membership', 'position' => 30); } // Forums are enabled and turned on. if ($this->current_group->enable_forum && bp_is_active('forums')) { $sub_nav[] = array('name' => _x('Forum', 'My Group screen nav', 'buddypress'), 'slug' => 'forum', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_forum', 'position' => 40, 'user_has_access' => $this->current_group->user_has_access, 'item_css_id' => 'forums'); } if ($this->current_group->front_template || bp_is_active('activity')) { /** * If the theme is using a custom front, create activity subnav. */ if ($this->current_group->front_template && bp_is_active('activity')) { $sub_nav[] = array('name' => _x('Activity', 'My Group screen nav', 'buddypress'), 'slug' => 'activity', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_activity', 'position' => 11, 'user_has_access' => $this->current_group->user_has_access, 'item_css_id' => 'activity', 'no_access_url' => $group_link); } /** * Only add the members subnav if it's not the home's nav. */ $sub_nav[] = array('name' => sprintf(_x('Members %s', 'My Group screen nav', 'buddypress'), '<span>' . number_format($this->current_group->total_member_count) . '</span>'), 'slug' => 'members', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_members', 'position' => 60, 'user_has_access' => $this->current_group->user_has_access, 'item_css_id' => 'members', 'no_access_url' => $group_link); } if (bp_is_active('friends') && bp_groups_user_can_send_invites()) { $sub_nav[] = array('name' => _x('Send Invites', 'My Group screen nav', 'buddypress'), 'slug' => 'send-invites', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_invite', 'item_css_id' => 'invite', 'position' => 70, 'user_has_access' => $this->current_group->user_has_access, 'no_access_url' => $group_link); } // If the user is a group admin, then show the group admin nav item. if (bp_is_item_admin()) { $sub_nav[] = array('name' => _x('Manage', 'My Group screen nav', 'buddypress'), 'slug' => 'admin', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_admin', 'position' => 1000, 'user_has_access' => true, 'item_css_id' => 'admin', 'no_access_url' => $group_link); $admin_link = trailingslashit($group_link . 'admin'); // Common params to all nav items. $default_params = array('parent_url' => $admin_link, 'parent_slug' => $this->current_group->slug . '_manage', 'screen_function' => 'groups_screen_group_admin', 'user_has_access' => bp_is_item_admin(), 'show_in_admin_bar' => true); $sub_nav[] = array_merge(array('name' => __('Details', 'buddypress'), 'slug' => 'edit-details', 'position' => 0), $default_params); $sub_nav[] = array_merge(array('name' => __('Settings', 'buddypress'), 'slug' => 'group-settings', 'position' => 10), $default_params); if (!bp_disable_group_avatar_uploads() && buddypress()->avatar->show_avatars) { $sub_nav[] = array_merge(array('name' => __('Photo', 'buddypress'), 'slug' => 'group-avatar', 'position' => 20), $default_params); } if (bp_group_use_cover_image_header()) { $sub_nav[] = array_merge(array('name' => __('Cover Image', 'buddypress'), 'slug' => 'group-cover-image', 'position' => 25), $default_params); } $sub_nav[] = array_merge(array('name' => __('Members', 'buddypress'), 'slug' => 'manage-members', 'position' => 30), $default_params); if ('private' == $this->current_group->status) { $sub_nav[] = array_merge(array('name' => __('Requests', 'buddypress'), 'slug' => 'membership-requests', 'position' => 40), $default_params); } $sub_nav[] = array_merge(array('name' => __('Delete', 'buddypress'), 'slug' => 'delete-group', 'position' => 1000), $default_params); } parent::setup_nav($main_nav, $sub_nav); } if (isset($this->current_group->user_has_access)) { /** * Fires at the end of the groups navigation setup if user has access. * * @since 1.0.2 * * @param bool $user_has_access Whether or not user has access. */ do_action('groups_setup_nav', $this->current_group->user_has_access); } else { /** This action is documented in bp-groups/bp-groups-loader.php */ do_action('groups_setup_nav'); } }
/** * @group bp_groups_user_can_send_invites */ public function test_bp_groups_user_can_send_invites() { $u_nonmembers = $this->factory->user->create(); $u_members = $this->factory->user->create(); $u_mods = $this->factory->user->create(); $u_admins = $this->factory->user->create(); $u_siteadmin = $this->factory->user->create(); $user_siteadmin = new WP_User($u_siteadmin); $user_siteadmin->add_role('administrator'); $g = $this->factory->group->create(); $time = time() - 60; $old_current_user = get_current_user_id(); // Create member-level user $this->add_user_to_group($u_members, $g, array('date_modified' => date('Y-m-d H:i:s', $time))); // Create mod-level user $this->add_user_to_group($u_mods, $g, array('date_modified' => date('Y-m-d H:i:s', $time))); $m_mod = new BP_Groups_Member($u_mods, $g); $m_mod->promote('mod'); // Create admin-level user $this->add_user_to_group($u_admins, $g, array('date_modified' => date('Y-m-d H:i:s', $time))); $m_admin = new BP_Groups_Member($u_admins, $g); $m_admin->promote('admin'); // Test with no status // In bp_group_get_invite_status(), no status falls back to "members" $this->assertTrue('' == groups_get_groupmeta($g, 'invite_status')); $this->assertFalse(bp_groups_user_can_send_invites($g, $u_nonmembers)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_members)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_mods)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_admins)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_siteadmin)); // Test with members status groups_update_groupmeta($g, 'invite_status', 'members'); $this->assertFalse(bp_groups_user_can_send_invites($g, $u_nonmembers)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_members)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_mods)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_admins)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_siteadmin)); // Falling back to current user $this->set_current_user($u_members); $this->assertTrue(bp_groups_user_can_send_invites($g, null)); // Test with mod status groups_update_groupmeta($g, 'invite_status', 'mods'); $this->assertFalse(bp_groups_user_can_send_invites($g, $u_nonmembers)); $this->assertFalse(bp_groups_user_can_send_invites($g, $u_members)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_mods)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_admins)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_siteadmin)); // Falling back to current user $this->set_current_user($u_members); $this->assertFalse(bp_groups_user_can_send_invites($g, null)); $this->set_current_user($u_mods); $this->assertTrue(bp_groups_user_can_send_invites($g, null)); // Test with admin status groups_update_groupmeta($g, 'invite_status', 'admins'); $this->assertFalse(bp_groups_user_can_send_invites($g, $u_nonmembers)); $this->assertFalse(bp_groups_user_can_send_invites($g, $u_members)); $this->assertFalse(bp_groups_user_can_send_invites($g, $u_mods)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_admins)); $this->assertTrue(bp_groups_user_can_send_invites($g, $u_siteadmin)); // Falling back to current user $this->set_current_user($u_mods); $this->assertFalse(bp_groups_user_can_send_invites($g, null)); $this->set_current_user($u_admins); $this->assertTrue(bp_groups_user_can_send_invites($g, null)); // Bad or null parameters $this->assertFalse(bp_groups_user_can_send_invites(59876454257, $u_members)); $this->assertFalse(bp_groups_user_can_send_invites($g, 958647515)); // Not in group context $this->assertFalse(bp_groups_user_can_send_invites(null, $u_members)); // In group context $g_obj = groups_get_group(array('group_id' => $g)); $this->go_to(bp_get_group_permalink($g_obj)); groups_update_groupmeta($g, 'invite_status', 'mods'); $this->assertFalse(bp_groups_user_can_send_invites(null, $u_nonmembers)); $this->assertFalse(bp_groups_user_can_send_invites(null, $u_members)); $this->assertTrue(bp_groups_user_can_send_invites(null, $u_mods)); $this->set_current_user($old_current_user); }
/** * Set up component navigation. * * @since BuddyPress (1.5.0) * * @see BP_Component::setup_nav() for a description of arguments. * * @param array $main_nav Optional. See BP_Component::setup_nav() for * description. * @param array $sub_nav Optional. See BP_Component::setup_nav() for * description. */ public function setup_nav($main_nav = array(), $sub_nav = array()) { // Only grab count if we're on a user page if (bp_is_user()) { $count = bp_get_total_group_count_for_user(); $class = 0 === $count ? 'no-count' : 'count'; $nav_name = sprintf(_x('Groups <span class="%s">%s</span>', 'Group screen nav with counter', 'buddypress'), esc_attr($class), number_format_i18n($count)); } else { $nav_name = _x('Groups', 'Group screen nav without counter', 'buddypress'); } // Add 'Groups' to the main navigation $main_nav = array('name' => $nav_name, 'slug' => $this->slug, 'position' => 70, 'screen_function' => 'groups_screen_my_groups', 'default_subnav_slug' => 'my-groups', 'item_css_id' => $this->id); // Determine user to use if (bp_displayed_user_domain()) { $user_domain = bp_displayed_user_domain(); } elseif (bp_loggedin_user_domain()) { $user_domain = bp_loggedin_user_domain(); } else { $user_domain = false; } if (!empty($user_domain)) { $groups_link = trailingslashit($user_domain . $this->slug); // Add the My Groups nav item $sub_nav[] = array('name' => __('Memberships', 'buddypress'), 'slug' => 'my-groups', 'parent_url' => $groups_link, 'parent_slug' => $this->slug, 'screen_function' => 'groups_screen_my_groups', 'position' => 10, 'item_css_id' => 'groups-my-groups'); // Add the Group Invites nav item $sub_nav[] = array('name' => __('Invitations', 'buddypress'), 'slug' => 'invites', 'parent_url' => $groups_link, 'parent_slug' => $this->slug, 'screen_function' => 'groups_screen_group_invites', 'user_has_access' => bp_core_can_edit_settings(), 'position' => 30); parent::setup_nav($main_nav, $sub_nav); } if (bp_is_groups_component() && bp_is_single_item()) { // Reset sub nav $sub_nav = array(); // Add 'Groups' to the main navigation $main_nav = array('name' => __('Memberships', 'buddypress'), 'slug' => $this->current_group->slug, 'position' => -1, 'screen_function' => 'groups_screen_group_home', 'default_subnav_slug' => $this->default_extension, 'item_css_id' => $this->id); $group_link = bp_get_group_permalink($this->current_group); // Add the "Home" subnav item, as this will always be present $sub_nav[] = array('name' => _x('Home', 'Group screen navigation title', 'buddypress'), 'slug' => 'home', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_home', 'position' => 10, 'item_css_id' => 'home'); // If this is a private group, and the user is not a // member and does not have an outstanding invitation, // show a "Request Membership" nav item. if (is_user_logged_in() && !$this->current_group->is_user_member && !groups_check_for_membership_request(bp_loggedin_user_id(), $this->current_group->id) && $this->current_group->status == 'private' && !groups_check_user_has_invite(bp_loggedin_user_id(), $this->current_group->id)) { $sub_nav[] = array('name' => _x('Request Membership', 'Group screen nav', 'buddypress'), 'slug' => 'request-membership', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_request_membership', 'position' => 30); } // Forums are enabled and turned on if ($this->current_group->enable_forum && bp_is_active('forums')) { $sub_nav[] = array('name' => _x('Forum', 'My Group screen nav', 'buddypress'), 'slug' => 'forum', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_forum', 'position' => 40, 'user_has_access' => $this->current_group->user_has_access, 'item_css_id' => 'forums'); } $sub_nav[] = array('name' => sprintf(_x('Members <span>%s</span>', 'My Group screen nav', 'buddypress'), number_format($this->current_group->total_member_count)), 'slug' => 'members', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_members', 'position' => 60, 'user_has_access' => $this->current_group->user_has_access, 'item_css_id' => 'members', 'no_access_url' => $group_link); if (bp_is_active('friends') && bp_groups_user_can_send_invites()) { $sub_nav[] = array('name' => _x('Send Invites', 'My Group screen nav', 'buddypress'), 'slug' => 'send-invites', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_invite', 'item_css_id' => 'invite', 'position' => 70, 'user_has_access' => $this->current_group->user_has_access, 'no_access_url' => $group_link); } // If the user is a group admin, then show the group admin nav item if (bp_is_item_admin()) { $sub_nav[] = array('name' => _x('Manage', 'My Group screen nav', 'buddypress'), 'slug' => 'admin', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_admin', 'position' => 1000, 'user_has_access' => true, 'item_css_id' => 'admin', 'no_access_url' => $group_link); $admin_link = trailingslashit($group_link . 'admin'); // Common params to all nav items $default_params = array('parent_url' => $admin_link, 'parent_slug' => $this->current_group->slug . '_manage', 'screen_function' => 'groups_screen_group_admin', 'user_has_access' => bp_is_item_admin(), 'show_in_admin_bar' => true); $sub_nav[] = array_merge(array('name' => __('Details', 'buddypress'), 'slug' => 'edit-details', 'position' => 0), $default_params); $sub_nav[] = array_merge(array('name' => __('Settings', 'buddypress'), 'slug' => 'group-settings', 'position' => 10), $default_params); if (!(int) bp_get_option('bp-disable-avatar-uploads') && buddypress()->avatar->show_avatars) { $sub_nav[] = array_merge(array('name' => __('Photo', 'buddypress'), 'slug' => 'group-avatar', 'position' => 20), $default_params); } $sub_nav[] = array_merge(array('name' => __('Members', 'buddypress'), 'slug' => 'manage-members', 'position' => 30), $default_params); if ('private' == $this->current_group->status) { $sub_nav[] = array_merge(array('name' => __('Requests', 'buddypress'), 'slug' => 'membership-requests', 'position' => 40), $default_params); } $sub_nav[] = array_merge(array('name' => __('Delete', 'buddypress'), 'slug' => 'delete-group', 'position' => 1000), $default_params); } parent::setup_nav($main_nav, $sub_nav); } if (isset($this->current_group->user_has_access)) { do_action('groups_setup_nav', $this->current_group->user_has_access); } else { do_action('groups_setup_nav'); } }
/** * Setup BuddyBar navigation * * @global BuddyPress $bp The one true BuddyPress instance */ function setup_nav() { // Define local variables $sub_nav = array(); // Add 'Groups' to the main navigation $main_nav = array('name' => sprintf(__('Groups <span>%d</span>', 'buddypress'), groups_total_groups_for_user()), 'slug' => $this->slug, 'position' => 70, 'screen_function' => 'groups_screen_my_groups', 'default_subnav_slug' => 'my-groups', 'item_css_id' => $this->id); $groups_link = trailingslashit(bp_loggedin_user_domain() . $this->slug); // Add the My Groups nav item $sub_nav[] = array('name' => __('Memberships', 'buddypress'), 'slug' => 'my-groups', 'parent_url' => $groups_link, 'parent_slug' => $this->slug, 'screen_function' => 'groups_screen_my_groups', 'position' => 10, 'item_css_id' => 'groups-my-groups'); // Add the Group Invites nav item $sub_nav[] = array('name' => __('Invitations', 'buddypress'), 'slug' => 'invites', 'parent_url' => $groups_link, 'parent_slug' => $this->slug, 'screen_function' => 'groups_screen_group_invites', 'user_has_access' => bp_is_my_profile(), 'position' => 30); parent::setup_nav($main_nav, $sub_nav); if (bp_is_groups_component() && bp_is_single_item()) { // Reset sub nav $sub_nav = array(); // Add 'Groups' to the main navigation $main_nav = array('name' => __('Memberships', 'buddypress'), 'slug' => $this->current_group->slug, 'position' => -1, 'screen_function' => 'groups_screen_group_home', 'default_subnav_slug' => $this->default_extension, 'item_css_id' => $this->id); $group_link = bp_get_group_permalink($this->current_group); // Add the "Home" subnav item, as this will always be present $sub_nav[] = array('name' => _x('Home', 'Group home navigation title', 'buddypress'), 'slug' => 'home', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_home', 'position' => 10, 'item_css_id' => 'home'); // If this is a private group, and the user is not a member, show a "Request Membership" nav item. if (is_user_logged_in() && !bp_current_user_can('bp_moderate') && !$this->current_group->is_user_member && !groups_check_for_membership_request(bp_loggedin_user_id(), $this->current_group->id) && $this->current_group->status == 'private') { $sub_nav[] = array('name' => __('Request Membership', 'buddypress'), 'slug' => 'request-membership', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_request_membership', 'position' => 30); } // Forums are enabled and turned on if ($this->current_group->enable_forum && bp_is_active('forums')) { $sub_nav[] = array('name' => __('Forum', 'buddypress'), 'slug' => 'forum', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_forum', 'position' => 40, 'user_has_access' => $this->current_group->user_has_access, 'item_css_id' => 'forums'); } $sub_nav[] = array('name' => sprintf(__('Members <span>%s</span>', 'buddypress'), number_format($this->current_group->total_member_count)), 'slug' => 'members', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_members', 'position' => 60, 'user_has_access' => $this->current_group->user_has_access, 'item_css_id' => 'members'); if (bp_is_active('friends') && bp_groups_user_can_send_invites()) { $sub_nav[] = array('name' => __('Send Invites', 'buddypress'), 'slug' => 'send-invites', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_invite', 'item_css_id' => 'invite', 'position' => 70, 'user_has_access' => $this->current_group->user_has_access); } // If the user is a group mod or more, then show the group admin nav item if (bp_is_item_admin() || bp_is_item_mod()) { $sub_nav[] = array('name' => __('Admin', 'buddypress'), 'slug' => 'admin', 'parent_url' => $group_link, 'parent_slug' => $this->current_group->slug, 'screen_function' => 'groups_screen_group_admin', 'position' => 1000, 'user_has_access' => true, 'item_css_id' => 'admin'); } parent::setup_nav($main_nav, $sub_nav); } if (isset($this->current_group->user_has_access)) { do_action('groups_setup_nav', $this->current_group->user_has_access); } else { do_action('groups_setup_nav'); } }