function UserDevelGenerate::generateElements

Business logic relating with each DevelGenerate plugin.

Parameters

array $values: The input values from the settings form.

Overrides DevelGenerateBase::generateElements

File

devel_generate/src/Plugin/DevelGenerate/UserDevelGenerate.php, line 121

Class

UserDevelGenerate
Provides a UserDevelGenerate plugin.

Namespace

Drupal\devel_generate\Plugin\DevelGenerate

Code

protected function generateElements(array $values) : void {
  $num = $values['num'];
  $kill = $values['kill'];
  $pass = $values['pass'];
  $age = $values['time_range'];
  $roles = array_filter($values['roles']);
  if ($kill) {
    $uids = $this->userStorage
      ->getQuery()
      ->condition('uid', 1, '>')
      ->accessCheck(FALSE)
      ->execute();
    $users = $this->userStorage
      ->loadMultiple($uids);
    $this->userStorage
      ->delete($users);
    $this->setMessage($this->formatPlural(count($uids), '1 user deleted', '@count users deleted.'));
  }
  if ($num > 0) {
    $names = [];
    while (count($names) < $num) {
      $name = $this->getRandom()
        ->word(mt_rand(6, 12));
      $names[$name] = '';
    }
    if ($roles === []) {
      $roles = [
        AccountInterface::AUTHENTICATED_ROLE,
      ];
    }
    foreach (array_keys($names) as $name) {
      /** @var \Drupal\user\UserInterface $account */
      $account = $this->userStorage
        ->create([
        'uid' => NULL,
        'name' => $name,
        'pass' => $pass,
        'mail' => $name . '@example.com',
        'status' => 1,
        'created' => $this->time
          ->getRequestTime() - mt_rand(0, $age),
        'roles' => array_values($roles),
        // A flag to let hook_user_* know that this is a generated user.
'devel_generate' => TRUE,
      ]);
      // Populate all fields with sample values.
      $this->populateFields($account);
      $account->save();
    }
  }
  $this->setMessage($this->t('@num_users created.', [
    '@num_users' => $this->formatPlural($num, '1 user', '@count users'),
  ]));
}