You are here

public function FieldStorageConfigEditForm::form in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php \Drupal\field_ui\Form\FieldStorageConfigEditForm::form()

Gets the actual form array to be built.

Overrides EntityForm::form

See also

\Drupal\Core\Entity\EntityForm::processForm()

\Drupal\Core\Entity\EntityForm::afterBuild()

File

core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php, line 61
Contains \Drupal\field_ui\Form\FieldStorageConfigEditForm.

Class

FieldStorageConfigEditForm
Provides a form for the "field storage" edit page.

Namespace

Drupal\field_ui\Form

Code

public function form(array $form, FormStateInterface $form_state) {
  $form = parent::form($form, $form_state);
  $field_label = $form_state
    ->get('field_config')
    ->label();
  $form['#title'] = $field_label;
  $form['#prefix'] = '<p>' . $this
    ->t('These settings apply to the %field field everywhere it is used. These settings impact the way that data is stored in the database and cannot be changed once data has been created.', array(
    '%field' => $field_label,
  )) . '</p>';

  // See if data already exists for this field.
  // If so, prevent changes to the field settings.
  if ($this->entity
    ->hasData()) {
    $form['#prefix'] = '<div class="messages messages--error">' . $this
      ->t('There is data for this field in the database. The field settings can no longer be changed.') . '</div>' . $form['#prefix'];
  }

  // Add settings provided by the field module. The field module is
  // responsible for not returning settings that cannot be changed if
  // the field already has data.
  $form['settings'] = array(
    '#weight' => -10,
    '#tree' => TRUE,
  );

  // Create an arbitrary entity object, so that we can have an instantiated
  // FieldItem.
  $ids = (object) array(
    'entity_type' => $form_state
      ->get('entity_type_id'),
    'bundle' => $form_state
      ->get('bundle'),
    'entity_id' => NULL,
  );
  $entity = _field_create_entity_from_ids($ids);
  $items = $entity
    ->get($this->entity
    ->getName());
  $item = $items
    ->first() ?: $items
    ->appendItem();
  $form['settings'] += $item
    ->storageSettingsForm($form, $form_state, $this->entity
    ->hasData());

  // Build the configurable field values.
  $cardinality = $this->entity
    ->getCardinality();
  $form['cardinality_container'] = array(
    // Reset #parents so the additional container does not appear.
    '#parents' => array(),
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Allowed number of values'),
    '#attributes' => array(
      'class' => array(
        'container-inline',
        'fieldgroup',
        'form-composite',
      ),
    ),
  );
  $form['cardinality_container']['cardinality'] = array(
    '#type' => 'select',
    '#title' => $this
      ->t('Allowed number of values'),
    '#title_display' => 'invisible',
    '#options' => array(
      'number' => $this
        ->t('Limited'),
      FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED => $this
        ->t('Unlimited'),
    ),
    '#default_value' => $cardinality == FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED ? FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED : 'number',
  );
  $form['cardinality_container']['cardinality_number'] = array(
    '#type' => 'number',
    '#default_value' => $cardinality != FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED ? $cardinality : 1,
    '#min' => 1,
    '#title' => $this
      ->t('Limit'),
    '#title_display' => 'invisible',
    '#size' => 2,
    '#states' => array(
      'visible' => array(
        ':input[name="cardinality"]' => array(
          'value' => 'number',
        ),
      ),
      'disabled' => array(
        ':input[name="cardinality"]' => array(
          'value' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
        ),
      ),
    ),
  );
  return $form;
}