Datelist::valueCallback

public static Datelist::valueCallback(&$element, $input, FormStateInterface $form_state)

Validates the date type to adjust 12 hour time and prevent invalid dates. If the date is valid, the date is set in the form.

Overrides FormElement::valueCallback

File

core/lib/Drupal/Core/Datetime/Element/Datelist.php, line 46

Class

Datelist
Provides a datelist element.

Namespace

Drupal\Core\Datetime\Element

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
public static function valueCallback(&$element, $input, FormStateInterface $form_state) {
  $parts = $element['#date_part_order'];
  $increment = $element['#date_increment'];
 
  $date = NULL;
  if ($input !== FALSE) {
    $return = $input;
    if (empty(static::checkEmptyInputs($input, $parts))) {
      if (isset($input['ampm'])) {
        if ($input['ampm'] == 'pm' && $input['hour'] < 12) {
          $input['hour'] += 12;
        }
        elseif ($input['ampm'] == 'am' && $input['hour'] == 12) {
          $input['hour'] -= 12;
        }
        unset($input['ampm']);
      }
      $timezone = !empty($element['#date_timezone']) ? $element['#date_timezone'] : NULL;
      try {
        $date = DrupalDateTime::createFromArray($input, $timezone);
      }
      catch (\Exception $e) {
        $form_state->setError($element, t('Selected combination of day and month is not valid.'));
      }
      if ($date instanceof DrupalDateTime && !$date->hasErrors()) {
        static::incrementRound($date, $increment);
      }
    }
  }
  else {
    $return = array_fill_keys($parts, '');
    if (!empty($element['#default_value'])) {
      $date = $element['#default_value'];
      if ($date instanceof DrupalDateTime && !$date->hasErrors()) {
        static::incrementRound($date, $increment);
        foreach ($parts as $part) {
          switch ($part) {
            case 'day':
              $format = 'j';
              break;
 
            case 'month':
              $format = 'n';
              break;
 
            case 'year':
              $format = 'Y';
              break;
 
            case 'hour':
              $format = in_array('ampm', $element['#date_part_order']) ? 'g' : 'G';
              break;
 
            case 'minute':
              $format = 'i';
              break;
 
            case 'second':
              $format = 's';
              break;
 
            case 'ampm':
              $format = 'a';
              break;
 
            default:
              $format = '';
 
          }
          $return[$part] = $date->format($format);
        }
      }
    }
  }
  $return['object'] = $date;
  return $return;
}
doc_Drupal
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.