You are here

function user_expire_find_users_to_expire_by_role in User Expire 7

Same name and namespace in other branches
  1. 8 user_expire.module \user_expire_find_users_to_expire_by_role()

Finds users to expire by role and expiration period.

Parameters

int $role_id: The role ID to search for.

int $seconds_since_login: Seconds since login. To find users *about* to expire, use a smaller number.

Return value

\DatabaseStatementInterface|null Returns an iterator for use in a loop.

2 calls to user_expire_find_users_to_expire_by_role()
user_expire_expire_by_role in ./user_expire.module
Expires user by roles according to rules in the database.
user_expire_expire_by_role_warning in ./user_expire.module
Warns users with an upcoming expiration by roles.

File

./user_expire.module, line 414
Main module file for User expire module.

Code

function user_expire_find_users_to_expire_by_role($role_id, $seconds_since_login) {

  // An inactivity period of zero means the rule is disabled for the role.
  if (empty($seconds_since_login)) {
    return NULL;
  }

  // Find all the of users that need to be expired.
  $query = db_select('users', 'u');
  $query
    ->fields('u', array(
    'uid',
  ))
    ->condition('status', 1, '=')
    ->condition('u.uid', 0, '<>');

  // Conditional fragment for checking on access.
  $db_and_access = db_and();
  $db_and_access
    ->condition('u.access', REQUEST_TIME - $seconds_since_login, '<=')
    ->condition('u.access', 0, '>');

  // Conditional fragment for checking on created.
  $db_and_created = db_and();
  $db_and_created
    ->condition('u.created', REQUEST_TIME - $seconds_since_login, '<=')
    ->condition('u.access', 0, '=');

  // Now OR the access and created fragments together.
  $access_or_created = db_or()
    ->condition($db_and_access)
    ->condition($db_and_created);

  // And finally, AND them together with the status and uid checks.
  $query
    ->condition($access_or_created);

  // If this role is not the authenticated role, add a condition on the role.
  // The Authenticated "role" is not in this table as it affects all users.
  if (DRUPAL_AUTHENTICATED_RID != $role_id) {
    $query
      ->join('users_roles', 'ur', 'u.uid = ur.uid');
    $query
      ->condition('ur.rid', $role_id, '=');
  }
  return $query
    ->execute();
}