You are here

public function SimpleUserImporterMappingForm::buildForm in Simple Node Importer 8

Build Flexible Mapping UI form.

Overrides FormInterface::buildForm

File

src/Form/SimpleUserImporterMappingForm.php, line 55

Class

SimpleUserImporterMappingForm
Flexible Mapping Form for the Simple Node Importer.

Namespace

Drupal\simple_node_importer\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, $option = NULL, NodeInterface $node = NULL) {
  global $base_url;
  $type = 'module';
  $module = 'simple_node_importer';
  $filepath = $base_url . '/' . drupal_get_path($type, $module) . '/css/files/mapping.png';
  $fid = $node
    ->get('field_upload_csv')
    ->getValue()[0]['target_id'];
  $file = File::load($fid);
  $uri = $file
    ->getFileUri();
  if (empty($node)) {
    $type = 'Simple Node Importer';
    $message = 'Node object is not valid.';
    $this->logger
      ->get($type)
      ->error($message, []);
  }
  elseif ($this->tempStore
    ->get('file_upload_session') == FALSE) {
    $response = new RedirectResponse('/node/add/simple-node');
    $response
      ->send();
  }
  else {

    // Options to be listed in File Column List.
    $headers = $this->services
      ->simpleNodeImporterGetAllColumnHeaders($uri);
    $entity_type = $option;
    $selected_option = $option;
    $type = 'mapping';
    $get_field_list = $this->services
      ->snpGetFieldList($entity_type, $selected_option, $type);
    $parameters = [
      'option' => $option,
      'node' => $node
        ->id(),
    ];
    $this->tempStore
      ->set('parameters', $parameters);

    // Add HelpText to the mapping form.
    $form['helptext'] = [
      '#theme' => 'mapping_help_text_info',
      '#fields' => [
        'filepath' => $filepath,
      ],
    ];

    // Add theme table to the mapping form.
    $form['mapping_form']['#theme'] = 'simple_node_import_table';

    // Mapping form.
    $defaultFieldArr = [
      'name',
      'mail',
      'status',
      'roles',
    ];
    foreach ($get_field_list as $key => $field) {
      if ($entity_type == 'user') {
        $field_name = $field
          ->getName();
        if (in_array($key, $defaultFieldArr)) {
          $field_label = $field
            ->getLabel()
            ->render();
          $fieldcardinality = $field
            ->getCardinality();
        }
        else {
          $field_info = FieldStorageConfig::loadByName($entity_type, $field_name);
          $fieldcardinality = $field_info
            ->get('cardinality');
          $field_label = $field
            ->getLabel();
        }
      }
      if ($fieldcardinality == -1 || $fieldcardinality > 1) {
        $form['mapping_form'][$key] = [
          '#type' => 'select',
          '#title' => $field_label,
          '#options' => $headers,
          '#multiple' => TRUE,
          '#required' => $field
            ->isRequired() ? TRUE : FALSE,
          '#empty_option' => $this
            ->t('Select'),
          '#empty_value' => '',
        ];
      }
      else {
        $form['mapping_form'][$key] = [
          '#type' => 'select',
          '#title' => $field_label,
          '#options' => $headers,
          '#required' => $field
            ->isRequired() ? TRUE : FALSE,
          '#empty_option' => $this
            ->t('Select'),
          '#empty_value' => '',
        ];
      }
    }

    // Get the preselected values for form fields.
    $form = $this->services
      ->simpleNodeImporterGetPreSelectedValues($form, $headers);
    $form['import'] = [
      '#type' => 'submit',
      '#value' => $this
        ->t('Import'),
      '#weight' => 49,
    ];
    $form['cancel'] = [
      '#type' => 'submit',
      '#value' => $this
        ->t('cancel'),
      '#weight' => 3,
      '#submit' => [
        '::snpRedirectToCancel',
      ],
    ];
    return $form;
  }
}