You are here

function user_badges_user_remove_badge in User Badges 7.4

Same name and namespace in other branches
  1. 5 user_badges.module \user_badges_user_remove_badge()
  2. 6.2 user_badges.module \user_badges_user_remove_badge()
  3. 6 user_badges.module \user_badges_user_remove_badge()
  4. 7 user_badges.module \user_badges_user_remove_badge()
  5. 7.2 user_badges.module \user_badges_user_remove_badge()
  6. 7.3 user_badges.module \user_badges_user_remove_badge()

Remove a badge from user.

Parameters

int $uid: User ID.

int $bid: Badge ID.

int $type: Whether set as part of the role, or individually assigned ('user', 'role'). At this moment it's not used; because we don't care how was it set for removing.

Return value

int Operation status

4 calls to user_badges_user_remove_badge()
user_badges_change_form_submit in ./user_badges.module
Process user_badges_change_form form submissions.
user_badges_ensure_old_roles_badges_removed in ./user_badges.module
A function to ensure that we remove automatically assigned badges.
user_badges_remove_badge_action in ./user_badges.actions.inc
Implements a Drupal action.
user_badges_rules_action_remove_badge_by_name in ./user_badges.rules.inc
Base action implementation: user_badges.

File

./user_badges.module, line 935
Hooks and other stuff related to user badge.

Code

function user_badges_user_remove_badge($uid, $bid, $type = NULL, $source = -1) {

  // Integrate rules events.
  if (module_exists('rules')) {
    $variables = array(
      'user' => $uid,
      'badge_id' => $bid,
    );
    rules_invoke_event_by_args('user_badges_badge_removed', $variables);
  }
  $ewrapper = entity_metadata_wrapper('user', $uid);
  $updated = FALSE;
  foreach ($ewrapper->user_badge_badges
    ->getIterator() as $delta => $user_badge_wrapper) {
    if ($user_badge_wrapper
      ->value()->bid == $bid) {
      $ewrapper->user_badge_badges[$delta]
        ->set(NULL);
      try {
        $ewrapper
          ->save();
        $updated = TRUE;
      } catch (EntityMetadataWrapperException $e) {
        return USER_BADGES_SAVE_ERROR;
      }
      break;
    }
  }
  if ($updated) {
    db_delete('user_badges_assignment')
      ->condition('uid', $uid)
      ->condition('bid', $bid)
      ->execute();
    if ($source === -1) {
      global $user;
      if ($user->uid) {
        $source = $user->uid;
      }
      else {
        $source = 0;
      }
    }
    module_invoke_all('user_delete_badge', $uid, $bid, $source);
    return USER_BADGES_SAVE_SUCCESS;
  }
  return USER_BADGES_NOT_MODIFIED;
}