You are here

public static function ScheduledPublishWidget::validateElement in Scheduled Publish 8.3

Handle element validation.

File

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

Class

ScheduledPublishWidget
Plugin implementation of the 'scheduled_publish_widget' widget.

Namespace

Drupal\scheduled_publish\Plugin\Field\FieldWidget

Code

public static function validateElement($element, FormStateInterface $form_state) {
  $triggering_element = $form_state
    ->getTriggeringElement();
  if (!$triggering_element || !isset($triggering_element['#sp_id'], $triggering_element['#name'])) {
    return;
  }
  $error_past_date = t("Date cannot be in the past");

  // Saving new entries.
  $button_name = 'sp-' . $triggering_element['#sp_id'] . '-entry-add';
  if ($triggering_element['#name'] === $button_name) {
    $values = $form_state
      ->getValue($triggering_element['#sp_id']);
    if (!$values || !$values['value']) {
      $form_state
        ->setError($element, t('All fields need to be filled'));
    }
    elseif ($values['value'] < new DrupalDateTime()) {
      $form_state
        ->setError($element, $error_past_date);
    }
  }
  if (!isset($triggering_element['#sp_row_delta'])) {
    return;
  }

  // Editing entries.
  $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['moderation_state'] || !$values['value']['date'] || !$values['value']['time']) {
      $form_state
        ->setError($element, t('All fields need to be filled'));
    }
    elseif (strtotime($values['value']['date'] . ' ' . $values['value']['time']) < time()) {
      $form_state
        ->setError($element, $error_past_date);
    }
  }
}