You are here

public function ScheduledPublishWidget::handleSubmissions in Scheduled Publish 8.3

Handles submissions.

1 call to ScheduledPublishWidget::handleSubmissions()
ScheduledPublishWidget::formElement in src/Plugin/Field/FieldWidget/ScheduledPublishWidget.php
Returns the form for a single field widget.

File

src/Plugin/Field/FieldWidget/ScheduledPublishWidget.php, line 426

Class

ScheduledPublishWidget
Plugin implementation of the 'scheduled_publish_widget' widget.

Namespace

Drupal\scheduled_publish\Plugin\Field\FieldWidget

Code

public function handleSubmissions(FormStateInterface $form_state) {
  $triggering_element = $form_state
    ->getTriggeringElement();
  if (!$triggering_element || !isset($triggering_element['#sp_id'], $triggering_element['#name'])) {
    return;
  }

  // Saving new entries.
  $button_name = 'sp-' . $triggering_element['#sp_id'] . '-entry-add';
  if ($triggering_element['#name'] === $button_name) {
    $this
      ->submitSaveEntry($form_state, $triggering_element);
  }
  if (!isset($triggering_element['#sp_row_delta'])) {
    return;
  }
  $entries = $form_state
    ->get([
    'scheduled_publish',
    $triggering_element['#sp_id'],
  ]);

  // Enabling remove form.
  $button_name = 'sp-' . $triggering_element['#sp_id'] . '-entry-remove-' . $triggering_element['#sp_row_delta'];
  if ($triggering_element['#name'] === $button_name) {
    $entries[$triggering_element['#sp_row_delta']]['form'] = 'remove';
  }

  // Canceling remove form.
  $button_name = 'sp-' . $triggering_element['#sp_id'] . '-remove-cancel-' . $triggering_element['#sp_row_delta'];
  if ($triggering_element['#name'] === $button_name) {
    $entries[$triggering_element['#sp_row_delta']]['form'] = NULL;
  }

  // Saving remove form.
  $button_name = 'sp-' . $triggering_element['#sp_id'] . '-remove-confirm-' . $triggering_element['#sp_row_delta'];
  if ($triggering_element['#name'] === $button_name) {
    unset($entries[$triggering_element['#sp_row_delta']]);
  }

  // Enabling edit form.
  $button_name = 'sp-' . $triggering_element['#sp_id'] . '-entry-edit-' . $triggering_element['#sp_row_delta'];
  if ($triggering_element['#name'] === $button_name) {
    $entries[$triggering_element['#sp_row_delta']]['form'] = 'edit';
  }

  // Canceling edit form.
  $button_name = 'sp-' . $triggering_element['#sp_id'] . '-edit-cancel-' . $triggering_element['#sp_row_delta'];
  if ($triggering_element['#name'] === $button_name) {
    $entries[$triggering_element['#sp_row_delta']]['form'] = NULL;
  }

  // Saving edit form.
  $button_name = 'sp-' . $triggering_element['#sp_id'] . '-edit-confirm-' . $triggering_element['#sp_row_delta'];
  if ($triggering_element['#name'] === $button_name) {
    $value_array = [
      $triggering_element['#sp_id'],
      'entries',
      $triggering_element['#sp_row_delta'],
      'form',
    ];
    $values = $form_state
      ->getValue($value_array);
    if ($values['value']['date'] && $values['value']['time']) {
      $date = new DrupalDateTime($values['value']['date'] . ' ' . $values['value']['time'], date_default_timezone_get());
      $date_display = $date
        ->format('d.m.Y - H:i');
      $date
        ->setTimezone(new \DateTimezone(ScheduledPublish::STORAGE_TIMEZONE));
      $entries[$triggering_element['#sp_row_delta']] = [
        'date' => $date
          ->format(ScheduledPublish::DATETIME_STORAGE_FORMAT),
        'date_display' => $date_display,
        'state' => $values['moderation_state'],
        'state_display' => NULL,
        'state_options' => [],
        'delta' => NULL,
        'form' => NULL,
      ];
    }
  }
  $form_state
    ->set([
    'scheduled_publish',
    $triggering_element['#sp_id'],
  ], $entries);
  $this
    ->handleEntries($form_state, $triggering_element['#sp_id']);
}