You are here

public function ContentSelectForm::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/ContentSelectForm.php, line 24

Class

ContentSelectForm
Simple wizard step form.

Namespace

Drupal\migrate_d2d_ui\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {

  // Start clean in case we came here via Previous.
  $cached_values = $form_state
    ->getTemporaryValue('wizard');
  $form_state
    ->setTemporaryValue('wizard', $cached_values);
  $type_count = $this
    ->connection($form_state)
    ->select('node_type', 't')
    ->fields('t', [
    'type',
    'name',
  ])
    ->countQuery()
    ->execute()
    ->fetchField();
  if (!$type_count) {
    $form['description'] = [
      '#markup' => $this
        ->t('There is no node data to be migrated from the source database.'),
    ];
    return $form;
  }
  $form['#tree'] = TRUE;
  $form['description'] = [
    '#markup' => $this
      ->t('For each content type on the source site, choose the destination site content type to import its content. You may also choose not to import a given content type, or to create a content type based on the source configuration.'),
  ];
  $base_options = [
    '-1' => t('--Do not import--'),
    '0' => t('--Create content type--'),
  ];
  $node_options = [];
  $local_types = NodeType::loadMultiple();
  foreach ($local_types as $type => $info) {
    $node_options[$type] = $info
      ->get('name');
  }
  asort($node_options);
  $result = $this
    ->connection($form_state)
    ->select('node_type', 't')
    ->fields('t', [
    'type',
    'name',
  ])
    ->orderBy('name')
    ->execute();
  foreach ($result as $row) {
    $options = $base_options + $node_options;

    // If we have a match on type name, default the mapping to that match
    // and remove the option to create a new type of that name.
    if (isset($node_options[$row->type])) {
      $default_value = $row->type;
      unset($options['0']);
    }
    else {
      $default_value = '-1';
    }
    $node_counts[$row->type] = $this
      ->connection($form_state)
      ->select('node', 'n')
      ->condition('type', $row->type)
      ->countQuery()
      ->execute()
      ->fetchField();

    // But, always default to do-not-import if there are no nodes.
    if ($node_counts[$row->type] == 0) {
      $default_value = '-1';
    }
    if ($node_counts[$row->type] > 0) {
      $title = $this
        ->t('@name (@count)', [
        '@name' => $row->name,
        '@count' => $this
          ->getStringTranslation()
          ->formatPlural($node_counts[$row->type], '1 node', '@count nodes'),
      ]);
      $form['content_types'][$row->type] = array(
        '#type' => 'select',
        '#title' => $title,
        '#options' => $options,
        '#default_value' => $default_value,
      );
    }
  }

  // Build select list from destination formats.
  $base_options = [
    '-1' => t('--Do not import--'),
    '0' => t('--Create format--'),
  ];

  // Destination formats
  $format_options = [];
  foreach (filter_formats() as $format_id => $format) {
    $format_options[$format_id] = $format
      ->get('name');
  }
  if ($cached_values['version'] == '7') {
    $table = 'filter_format';
  }
  else {
    $table = 'filter_formats';
  }
  $result = $this
    ->connection($form_state)
    ->select($table, 'f')
    ->fields('f', [
    'format',
    'name',
  ])
    ->execute();
  $form['format_overview'] = [
    '#markup' => $this
      ->t('For each text format on the legacy site, choose whether to ignore that format, or to assign a different format to content with that legacy format.'),
  ];
  foreach ($result as $row) {
    $options = $base_options + $format_options;

    // If we have a match on format name, default the mapping to that match.
    if ($match = $this
      ->caseArraySearch($row->name, $format_options)) {
      $default_value = $match;
      unset($options['0']);
    }
    else {
      $default_value = '-1';
    }
    $form['formats'][$row->format] = [
      '#type' => 'select',
      '#title' => $row->name,
      '#options' => $options,
      '#default_value' => $default_value,
    ];
  }
  return $form;
}