/**
  * update user roles and capabilities
  * @param type $user
  * @return boolean
  */
 public function solvease_roles_capabilities_update_user_role_cap($user_id)
 {
     // check if its a valid POST
     if (!isset($_POST['solvease_user_role_cap_nonce']) || !wp_verify_nonce($_POST['solvease_user_role_cap_nonce'], 'solvease_user_role_cap') || $_POST['user_id'] != $user_id) {
         return;
     }
     $user = new WP_User($user_id);
     // capabilities
     $capabilities = isset($_POST['cap']) ? array_keys($_POST['cap']) : array();
     // all user roles
     $all_roles = $this->solvease_roles_capabilities_get_roles();
     // primary roles
     $primary_role = $_POST['primary_role'];
     // secondary roles
     $secondary_roles = isset($_POST['secondary_roles']) ? array_keys($_POST['secondary_roles']) : array();
     // blank user roles
     $user->roles = array();
     // remove all user roles
     $user->remove_all_caps();
     // add primary roles
     if ($primary_role != '' && isset($all_roles[$primary_role])) {
         $user->add_role($primary_role);
     } else {
         return FALSE;
     }
     // add secondary roles
     if (!empty($secondary_roles)) {
         foreach ($secondary_roles as $secondary_role) {
             if (isset($all_roles[$secondary_role]) && $primary_role != $secondary_role) {
                 $user->add_role($secondary_role);
             }
         }
     }
     // add capabilities of user roles
     $user->update_user_level_from_caps();
     // add capabilities
     if (!empty($capabilities)) {
         foreach ($capabilities as $capability) {
             $user->add_cap($capability);
         }
     }
     return $user;
 }
 /**
  * Update user roles and capabilities
  * 
  * @global WP_Roles $wp_roles
  * @param WP_User $user
  * @return boolean
  */
 private function update_user($user)
 {
     global $wp_roles;
     $values = array_values($user->roles);
     $primary_role = array_shift($values);
     // get 1st element from roles array as user primary role
     if (empty($primary_role) || !isset($this->roles[$primary_role])) {
         $primary_role = '';
     }
     if (function_exists('bbp_filter_blog_editable_roles')) {
         // bbPress plugin is active
         $bbp_user_role = bbp_get_user_role($user->ID);
     } else {
         $bbp_user_role = '';
     }
     // revoke all roles and capabilities from this user
     $user->roles = array();
     $user->remove_all_caps();
     // restore primary role
     if (!empty($primary_role)) {
         $user->add_role($primary_role);
     }
     // restore bbPress user role if she had one
     if (!empty($bbp_user_role)) {
         $user->add_role($bbp_user_role);
     }
     // add other roles to user
     foreach ($_POST as $key => $value) {
         $result = preg_match('/^wp_role_(.+)/', $key, $match);
         if ($result === 1) {
             $role = $match[1];
             if (isset($wp_roles->roles[$role])) {
                 $user->add_role($role);
             }
         }
     }
     // add individual capabilities to user
     if (count($this->capabilities_to_save) > 0) {
         foreach ($this->capabilities_to_save as $key => $value) {
             $user->add_cap($key);
         }
     }
     $user->update_user_level_from_caps();
     return true;
 }