You are here

function uc_recurring_subscription_action_revoke_role in UC Recurring Payments and Subscriptions 7.2

Same name and namespace in other branches
  1. 6.2 modules/uc_recurring_subscription/uc_recurring_subscription.ca.inc \uc_recurring_subscription_action_revoke_role()

Revoke user role(s).

1 string reference to 'uc_recurring_subscription_action_revoke_role'
uc_recurring_subscription_ca_action in modules/uc_recurring_subscription/uc_recurring_subscription.ca.inc
Implementation of hook_ca_action().

File

modules/uc_recurring_subscription/uc_recurring_subscription.ca.inc, line 354

Code

function uc_recurring_subscription_action_revoke_role($order, $settings) {

  // TODO Convert "user_load" to "user_load_multiple" if "$order->uid" is other than a uid.
  // To return a single user object, wrap "user_load_multiple" with "array_shift" or equivalent.
  // Example: array_shift(user_load_multiple(array(), $order->uid))
  // TODO Convert "user_load" to "user_load_multiple" if "$order->uid" is other than a uid.
  // To return a single user object, wrap "user_load_multiple" with "array_shift" or equivalent.
  // Example: array_shift(user_load_multiple(array(), $order->uid))
  $account = user_load($order->uid);
  $roles = user_roles(TRUE);
  if ($settings['role_option'] == 'custom') {
    foreach ($settings['role'] as $rid => $role) {
      unset($account->roles[$rid]);
      watchdog('uc_recurring', 'Revoked !role role from !user', array(
        '!role' => $roles[$rid],
        '!user' => $account->name,
      ));
    }
  }
  else {
    foreach ($order->products as $pid => $product) {
      $subscription = uc_recurring_subscription_load($product->nid);
      if (!empty($subscription->access[$settings['role_option']])) {
        foreach ($subscription->access[$settings['role_option']] as $rid => $role) {

          // @todo: we need to check other subscriptions to ensure that the role
          // is no longer required by another subscription.
          unset($account->roles[$rid]);
        }
      }
    }
  }
  user_save($account, array(
    'roles' => $account->roles,
  ));

  // TODO Convert "user_load" to "user_load_multiple" if "$order->uid" is other than a uid.
  // To return a single user object, wrap "user_load_multiple" with "array_shift" or equivalent.
  // Example: array_shift(user_load_multiple(array(), $order->uid))
  // TODO Convert "user_load" to "user_load_multiple" if "$order->uid" is other than a uid.
  // To return a single user object, wrap "user_load_multiple" with "array_shift" or equivalent.
  // Example: array_shift(user_load_multiple(array(), $order->uid))
  $account = user_load($order->uid);
}