示例#1
0
 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;
}
示例#3
0
 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']);
     }
 }