You are here

public function UserCsvImportForm::buildForm in User CSV import 2.0.x

Same name and namespace in other branches
  1. 8 src/Form/UserCsvImportForm.php \Drupal\user_csv_import\Form\UserCsvImportForm::buildForm()
  2. 1.0.x src/Form/UserCsvImportForm.php \Drupal\user_csv_import\Form\UserCsvImportForm::buildForm()

Implements \Drupal\Core\Form\FormInterface::buildForm().

Parameters

array $form: The form array.

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

Return value

array Return the form object.

Overrides FormInterface::buildForm

File

src/Form/UserCsvImportForm.php, line 84

Class

UserCsvImportForm
Provides methods to define and build the user import form.

Namespace

Drupal\user_csv_import\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form['#tree'] = TRUE;

  // Options field set.
  $form['config_options'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Options'),
  ];

  // Roles field.
  $roles = user_role_names();
  unset($roles['anonymous']);
  $form['config_options']['roles'] = [
    '#type' => 'checkboxes',
    '#title' => $this
      ->t('Roles'),
    '#options' => $roles,
  ];

  // Special handling for the inevitable "Authenticated user" role.
  $form['config_options']['roles'][RoleInterface::AUTHENTICATED_ID] = [
    '#default_value' => TRUE,
    '#disabled' => TRUE,
  ];

  // Default password.
  $form['config_options']['password'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Default password'),
    '#required' => TRUE,
    '#description' => t('Passwords can be set in different ways. You can set one here that will be applied to all accounts. If you wish, you may set your automated emails to send a password reset link. This would allow the new users to set their own passwords. Optionally, you may checkmark the Password (pass) field below and provide unique passwords in the CSV for each user. In that case, this field is still required as any unpopulated `pass` column fields will default to this Default Password.'),
  ];

  // Status.
  $form['config_options']['status'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Status'),
    '#options' => [
      '0' => $this
        ->t('Blocked'),
      '1' => $this
        ->t('Active'),
    ],
    '#description' => t('Ensure this is set to Active if you want the user to be enabled.'),
  ];

  // Send email on create user.
  $form['config_options']['registration_email_type'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Select registration email type to send to user'),
    '#options' => [
      'none' => $this
        ->t('Do not send a registration email'),
      'register_admin_created' => $this
        ->t('Welcome message for user created by the admin'),
      'register_no_approval_required' => $this
        ->t('Welcome message when user self-registers'),
      'status_activated' => $this
        ->t('Account activated'),
    ],
    '#description' => t('If sending, ensure that \'Status\' is correctly set to coorispond with the email you plan to send out. Most sites will manage the emails here: /admin/config/people/accounts'),
  ];

  // Fields field set.
  $form['config_fields'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Fields'),
  ];

  // Get user entity fields.
  $user_fields = $this
    ->filterDefaultFields($this->entityManager
    ->getFieldStorageDefinitions('user'));

  // Construct values for checkboxes.
  $selectable_fields = [];
  foreach ($user_fields as $field) {
    $selectable_fields[$field
      ->getName()] = $field
      ->getLabel();
  }

  // Select all fields.
  $form['config_fields']['check_all'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('All'),
  ];

  // User form fields.
  $form['config_fields']['fields'] = [
    '#type' => 'checkboxes',
    '#options' => $selectable_fields,
  ];

  // File to upload.
  $form['file'] = [
    '#type' => 'file',
    '#title' => 'CSV file upload',
    '#upload_validators' => [
      'file_validate_extensions' => [
        'csv',
      ],
    ],
  ];
  $form['actions']['#type'] = 'actions';
  $form['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Import users'),
    '#button_type' => 'primary',
  ];
  $form['actions']['sample'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Generate sample CSV'),
    '#button_type' => 'secondary',
    '#submit' => [
      [
        $this,
        'generateSample',
      ],
    ],
  ];

  // By default, render the form using theme_system_config_form().
  $form['#theme'] = 'system_config_form';
  return $form;
}