public static function add_user_groups($user_id, $omit_group_ids = array()) { $group_types = pp_get_group_types(array('editable' => true)); //foreach( apply_filters( 'pp_membership_editable_group_types', array( 'pp_group' ) ) as $agent_type ) { foreach (pp_get_group_types(array('editable' => true)) as $agent_type) { if ('pp_group' == $agent_type && in_array('pp_net_group', $group_types)) { continue; } if (empty($_POST[$agent_type])) { continue; } //if ( ! pp_has_group_cap( 'pp_manage_members', 0, $agent_type ) ) // continue; global $pp_current_user; $status = isset($_POST['pp_membership_status']) ? pp_sanitize_key($_POST['pp_membership_status']) : 'active'; if ($user_id == $pp_current_user->ID) { $stored_groups = (array) $pp_current_user->groups[$agent_type]; } else { $user = pp_get_user($user_id, '', array('skip_role_merge' => 1)); $stored_groups = isset($user->groups[$agent_type]) ? (array) $user->groups[$agent_type] : array(); } // by retrieving filtered groups here, user will only modify membership for groups they can administer $is_administrator = pp_is_user_administrator(); $posted_groups = isset($_POST[$agent_type]) ? $_POST[$agent_type] : array(); if ($omit_group_ids) { $posted_groups = array_diff($posted_groups, $omit_group_ids); } foreach ($posted_groups as $group_id) { if (isset($stored_groups[$group_id])) { continue; } if (pp_has_group_cap('pp_manage_members', $group_id, $agent_type)) { $args = compact('agent_type', 'status'); $args = apply_filters('pp_add_group_args', $args, $group_id); pp_add_group_user((int) $group_id, $user_id, $args); } } } }
/** * Edit group settings based on contents of $_POST * * @param int $group_id Optional. Group ID. * @return int group id of the updated group */ function _pp_edit_group($group_id = 0, $agent_type = 'pp_group', $members_only = false) { global $wpdb; if ($group_id) { $update = true; $group = pp_get_group($group_id, $agent_type); } else { $update = false; $group = (object) array(); } if (!$members_only) { if (isset($_REQUEST['group_name'])) { $group->group_name = sanitize_text_field($_REQUEST['group_name']); } if (isset($_REQUEST['description'])) { $group->group_description = sanitize_text_field($_REQUEST['description']); } $errors = new WP_Error(); /* checking that username has been typed */ if (!$group->group_name) { $errors->add('group_name', __('<strong>ERROR</strong>: Please enter a group name.', 'pp')); } elseif (!$update && !PP_GroupsUpdate::group_name_available($group->group_name, $agent_type)) { $errors->add('user_login', __('<strong>ERROR</strong>: This group name is already registered. Please choose another one.', 'pp')); } // Allow plugins to return their own errors. do_action_ref_array('pp_group_profile_update_errors', array(&$errors, $update, &$group)); if ($errors->get_error_codes()) { return $errors; } if ($update) { PP_GroupsUpdate::update_group($group_id, $group, $agent_type); } else { $group_id = PP_GroupsUpdate::create_group($group, $agent_type); } } if ($group_id) { $member_types = array(); if (pp_has_group_cap('pp_manage_members', $group_id, $agent_type)) { $member_types[] = 'member'; } foreach ($member_types as $member_type) { if (isset($_REQUEST["{$member_type}_csv"]) && $_REQUEST["{$member_type}_csv"] != -1) { // handle member changes $current = pp_get_group_members($group_id, $agent_type, 'id', compact('member_type')); $selected = isset($_REQUEST["{$member_type}_csv"]) ? explode(",", pp_sanitize_csv($_REQUEST["{$member_type}_csv"])) : array(); if ('member' != $member_type || !apply_filters('pp_custom_agent_update', false, $agent_type, $group_id, $selected)) { if ($add_users = array_diff($selected, $current)) { pp_add_group_user($group_id, $add_users, compact('agent_type', 'member_type')); } if ($remove_users = array_diff($current, $selected)) { pp_remove_group_user($group_id, $remove_users, compact('agent_type', 'member_type')); } } } } // end foreach member_types do_action('pp_edited_group', $agent_type, $group_id, $update); } return $group_id; }
public function groups_bulk() { if (empty($_REQUEST['users']) || empty($_REQUEST['pp-add-group']) && empty($_REQUEST['pp-remove-group'])) { return; } // Bail if nonce check fails check_admin_referer('pp-bulk-groups', 'pp-bulk-groups-nonce'); if (!current_user_can('promote_users') || !current_user_can('edit_users') || !current_user_can('pp_manage_members')) { return; } global $current_user; if (!empty($_REQUEST['pp-add-group'])) { pp_add_group_user($_REQUEST['pp-add-group'], $_REQUEST['users']); } elseif (!empty($_REQUEST['pp-remove-group'])) { pp_remove_group_user($_REQUEST['pp-remove-group'], $_REQUEST['users']); } }