You are here

public function FloodUnblockManager::get_blocked_user_entries in Flood Unblock 8

Same name and namespace in other branches
  1. 8.2 src/FloodUnblockManager.php \Drupal\flood_unblock\FloodUnblockManager::get_blocked_user_entries()

Generate rows from the entries in the flood table.

Return value

array User blocked entries in the flood table.

File

src/FloodUnblockManager.php, line 107

Class

FloodUnblockManager

Namespace

Drupal\flood_unblock

Code

public function get_blocked_user_entries() {
  $entries = [];
  if ($this->database
    ->schema()
    ->tableExists('flood')) {
    $query = $this->database
      ->select('flood', 'f');
    $query
      ->addField('f', 'identifier');
    $query
      ->addExpression('count(*)', 'count');
    $query
      ->condition('f.event', '%failed_login_user', 'LIKE');
    $query
      ->groupBy('identifier');
    $results = $query
      ->execute();
    foreach ($results as $result) {
      $parts = explode('-', $result->identifier);
      $result->uid = $parts[0];
      $result->ip = $parts[1] ?? NULL;
      if (function_exists('smart_ip_get_location') && $result->ip) {
        $location = smart_ip_get_location($result->ip);
        $location_string = sprintf(" (%s %s %s)", $location['city'], $location['region'], $location['country_code']);
      }
      else {
        $location_string = '';
      }
      $blocked = !$this->flood
        ->isAllowed('user.failed_login_user', $this->config
        ->get('user_limit'), $this->config
        ->get('user_window'), $result->identifier);

      /** @var \Drupal\user\Entity\User $user */
      $user = $this->entityTypeManager
        ->getStorage('user')
        ->load($result->uid);
      if (isset($user)) {
        $user_link = $user
          ->toLink($user
          ->getAccountName());
      }
      else {
        $user_link = $this
          ->t('Deleted user: @user', [
          '@user' => $result->uid,
        ]);
      }
      $entries[$result->identifier] = [
        'type' => 'user',
        'uid' => $result->uid,
        'ip' => $result->ip,
        'username' => $user_link,
        'count' => $result->count,
        'location' => $location_string,
        'blocked' => $blocked,
      ];
    }
  }
  return $entries;
}