You are here

public function UserForm::buildForm in Drupal-to-Drupal data migration 8.3

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides FormInterface::buildForm

File

migrate_d2d_ui/src/Form/UserForm.php, line 23

Class

UserForm
Simple wizard step form.

Namespace

Drupal\migrate_d2d_ui\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $cached_values = $form_state
    ->getTemporaryValue('wizard');
  $connection = $this
    ->connection($form_state);
  $form['overview'] = [
    '#markup' => $this
      ->t('User accounts other than the admin account (user ID 1) may be imported to this site.'),
  ];
  $form['#tree'] = TRUE;
  if (!isset($this->userCount)) {
    $this->userCount = $connection
      ->select('users', 'u')
      ->condition('uid', 1, '>')
      ->countQuery()
      ->execute()
      ->fetchField();
  }
  $form['users'] = [
    '#markup' => $this
      ->t('Number of users available to be migrated from your Drupal @version site: @count', [
      '@version' => $cached_values['version'],
      '@count' => $this->userCount,
    ]),
  ];
  $form['do_migration'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Perform import of users'),
    '#default_value' => TRUE,
  ];

  // Build select list from destination roles.
  $base_options = [
    '-1' => $this
      ->t('--Do not import--'),
    '0' => $this
      ->t('--Create role--'),
  ];
  $role_options = [];
  foreach (user_role_names(TRUE) as $rid => $role) {
    $role_options[$rid] = $role;
  }

  // Go through the non-trivial source roles.
  $result = $connection
    ->select('role', 'r')
    ->fields('r', [
    'rid',
    'name',
  ])
    ->condition('name', [
    'anonymous user',
    'authenticated user',
  ], 'NOT IN')
    ->execute();
  $source_roles = [];
  foreach ($result as $row) {
    $source_roles[$row->rid] = $row->name;
  }
  if (!empty($source_roles)) {

    // Description
    $form['role_overview'] = [
      '#markup' => $this
        ->t('For each user role on the legacy site, choose whether to ignore that role, to create it on this site, or to assign a different role to users with that legacy role.'),
    ];
    foreach ($source_roles as $rid => $name) {
      $options = $base_options + $role_options;

      // If we have a match on role name, default the mapping to that match
      // and remove the option to create a new role of that name.
      if (in_array($name, $role_options)) {
        $default_value = $name;
        unset($options['0']);
      }
      else {
        $default_value = '-1';
      }
      $count = $connection
        ->select('users_roles', 'ur')
        ->condition('rid', $rid)
        ->countQuery()
        ->execute()
        ->fetchField();
      $title = $this
        ->t('@name (@count)', [
        '@name' => $name,
        '@count' => $this
          ->getStringTranslation()
          ->formatPlural($count, '1 user', '@count users'),
      ]);
      $form['role'][$name] = [
        '#type' => 'select',
        '#title' => $title,
        '#options' => $options,
        '#default_value' => $default_value,
      ];
    }
  }
  else {
    $form['role_overview'] = [
      '#markup' => $this
        ->t('There are no user roles in the source site that are not already in the destination site'),
    ];
  }
  $options = [
    'authenticated user' => 'authenticated user',
  ] + $role_options;
  $form['default_role'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Default role'),
    '#description' => $this
      ->t('Choose the role to assign to any user accounts who had none of the above roles on the legacy site'),
    '#options' => $options,
    '#default_value' => AccountInterface::AUTHENTICATED_ROLE,
  ];
  return $form;
}