1.20.x date.class.inc public BackdropDateTime::arrayErrors($arr)

Finds possible errors in an array of date part values.

The forceValid() function will change an invalid value to a valid one, so we just need to see if the value got altered.

Parameters

array $arr: An array of date values, keyed by date part.

Return value

array: An array of error messages, keyed by date part.

File

includes/date.class.inc, line 773

Class

BackdropDateTime
Extends PHP DateTime class for use with Backdrop.

Code

public function arrayErrors($arr) {
  $errors = array();
  $now = date_now();
  $default_month = !empty($arr['month']) ? $arr['month'] : $now->format('n');
  $default_year = !empty($arr['year']) ? $arr['year'] : $now->format('Y');

  $this->granularity = array();
  foreach ($arr as $part => $value) {
    // Explicitly set the granularity to the values in the input array.
    if (is_numeric($value)) {
      $this->addGranularity($part);
    }
    // Avoid false errors when a numeric value is input as a string by casting
    // as an integer.
    $value = intval($value);
    if (!empty($value) && $this->forceValid($part, $value, 'now', $default_month, $default_year) != $value) {
      // Use a switch/case to make translation easier by providing a different
      // message for each part.
      switch ($part) {
        case 'year':
          $errors['year'] = t('The year is invalid.');
          break;

        case 'month':
          $errors['month'] = t('The month is invalid.');
          break;

        case 'day':
          $errors['day'] = t('The day is invalid.');
          break;

        case 'hour':
          $errors['hour'] = t('The hour is invalid.');
          break;

        case 'minute':
          $errors['minute'] = t('The minute is invalid.');
          break;

        case 'second':
          $errors['second'] = t('The second is invalid.');
          break;
      }
    }
  }
  if ($this->hasTime()) {
    $this->addGranularity('timezone');
  }
  return $errors;
}