You are here

public static function FieldStateManager::settingsSubmit in Field States UI 8.2

Submit function to add/edit field states.

Parameters

array $form: The whole EntityFormDisplay form array

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

File

src/FieldStateManager.php, line 492

Class

FieldStateManager
Manages field state plugins.

Namespace

Drupal\field_states_ui

Code

public static function settingsSubmit(array $form, FormStateInterface $form_state) {
  $trigger = $form_state
    ->getTriggeringElement();
  $field_name = $trigger['#field_name'];
  $form_state
    ->set('plugin_settings_edit', $field_name);

  /** @var \Drupal\Core\Entity\EntityFormInterface $form_object */
  $form_object = $form_state
    ->getFormObject();

  /** @var \Drupal\Core\Entity\Entity\EntityFormDisplay $entity */
  $entity = $form_object
    ->getEntity();

  // Show the add new field state form for the specified field state type.
  if ($trigger['#op'] == 'add') {
    $form_state
      ->set('field_states_ui_edit', $field_name);
  }
  elseif ($trigger['#op'] == 'cancel') {
    $form_state
      ->set('field_states_ui_edit', NULL);
    $form_state
      ->set('field_states_ui_target', NULL);
  }
  elseif ($trigger['#op'] == 'edit') {
    $form_state
      ->set('field_states_ui_edit', $field_name);
    $form_state
      ->set('field_states_ui_target', $trigger['#key']);
  }
  elseif ($trigger['#op'] == 'delete') {
    $form_state
      ->set('field_states_ui_edit', 'delete');
    $form_state
      ->set('field_states_ui_target', $trigger['#key']);
  }
  elseif ($trigger['#op'] == 'process_delete') {
    $field = $entity
      ->getComponent($field_name);
    unset($field['third_party_settings']['field_states_ui']['field_states'][$form_state
      ->get('field_states_ui_target')]);
    $entity
      ->setComponent($field_name, $field);
    $entity
      ->save();
    $form_state
      ->set('field_states_ui_edit', NULL);
    $form_state
      ->set('field_states_ui_target', NULL);
  }
  elseif ($trigger['#op'] == 'new') {
    $field = $entity
      ->getComponent($field_name);
    $field_state = self::getManager()
      ->createInstance($trigger['#plugin']);
    $field_state_data = $form_state
      ->getValue([
      'fields',
      $field_name,
      'settings_edit_form',
      'third_party_settings',
      'field_states_ui',
      'form',
      'edit',
    ]);
    $field_state
      ->submitConfigurationForm($form, (new FormState())
      ->setValues($field_state_data));
    $field['third_party_settings']['field_states_ui']['field_states'][$field_state
      ->getUuid()] = $field_state
      ->getConfiguration();
    $entity
      ->setComponent($field_name, $field);
    $entity
      ->save();
    $form_state
      ->set('field_states_ui_edit', NULL);
  }
  elseif ($trigger['#op'] == 'process_update') {
    $field = $entity
      ->getComponent($field_name);
    $target = $form_state
      ->get('field_states_ui_target');
    $field_state = self::getManager()
      ->createInstance($trigger['#plugin'], $field['third_party_settings']['field_states_ui']['field_states'][$target]);
    $field_state_data = $form_state
      ->getValue([
      'fields',
      $field_name,
      'settings_edit_form',
      'third_party_settings',
      'field_states_ui',
      'form',
      'edit',
    ]);
    $field_state
      ->submitConfigurationForm($form, (new FormState())
      ->setValues($field_state_data));
    $field['third_party_settings']['field_states_ui']['field_states'][$field_state
      ->getUuid()] = $field_state
      ->getConfiguration();
    $entity
      ->setComponent($field_name, $field);
    $entity
      ->save();
    $form_state
      ->set('field_states_ui_edit', NULL);
    $form_state
      ->set('field_states_ui_target', NULL);
  }
  $form_state
    ->setRebuild();
}