You are here

function purge_users_never_loggedin_user_ids in Auto Purge Users 8.3

Same name and namespace in other branches
  1. 8 purge_users.module \purge_users_never_loggedin_user_ids()
  2. 8.2 purge_users.module \purge_users_never_loggedin_user_ids()
  3. 7.2 purge_users.module \purge_users_never_loggedin_user_ids()
  4. 7 purge_users.module \purge_users_never_loggedin_user_ids()

Get users who never login at all.

1 call to purge_users_never_loggedin_user_ids()
purge_users_get_user_ids in ./purge_users.module
Get user ids to purge.

File

./purge_users.module, line 51
Purge users module file.

Code

function purge_users_never_loggedin_user_ids($param, $included_user_roles = [], $excluded_user_roles = []) {

  // Get a time stamp according to the period selected.
  $logindate = '';
  if (!empty($param['never_login_value'])) {
    $logindate = strtotime('-' . $param['never_login_value'] . ' ' . $param['never_login_period']);
  }

  // Query through db table to get users ids.
  $db = \Drupal::database();
  $exist_query = $db
    ->select('user__roles', 'ur');
  $exist_query
    ->fields('ur', [
    'entity_id',
  ]);
  $exist_query
    ->where('ur.entity_id = u.uid');
  $exist_query
    ->condition('ur.roles_target_id', $included_user_roles, 'IN');
  $not_exist_query = $db
    ->select('user__roles', 'ur');
  $not_exist_query
    ->fields('ur', [
    'entity_id',
  ]);
  $not_exist_query
    ->where('ur.entity_id = u.uid');
  $not_exist_query
    ->condition('ur.roles_target_id', $excluded_user_roles, 'IN');
  $query = $db
    ->select('users_field_data', 'u')
    ->distinct();
  $query
    ->leftjoin('user__roles', 'ur', 'ur.entity_id = u.uid');
  $query
    ->fields('u', [
    'uid',
  ]);
  $query
    ->condition('u.uid', 1, '>');
  if (!empty($param['never_login_value'])) {
    $query
      ->condition('u.created', $logindate, '<');
    $query
      ->condition('u.login', 0);
  }
  if (in_array(AccountInterface::AUTHENTICATED_ROLE, $included_user_roles)) {
    $db_or = $db
      ->condition('OR');
    $db_or
      ->isNull('ur.roles_target_id');
    $db_or
      ->exists($exist_query);
    $query
      ->condition($db_or);
  }
  else {
    $query
      ->exists($exist_query);
  }
  if ($param['disregard_blocked_users']) {
    $query
      ->condition('u.status', 1);
  }
  $query
    ->notExists($not_exist_query);
  $uids = $query
    ->execute()
    ->fetchCol();

  // Allow other modules to modify the result.
  \Drupal::moduleHandler()
    ->alter('purge_never_loggedin_user_ids', $uids);
  return $uids;
}