You are here

public static function DateRecurFieldItemList::processDefaultValue in Recurring Dates Field 3.1.x

Same name and namespace in other branches
  1. 8.2 src/Plugin/Field/FieldType/DateRecurFieldItemList.php \Drupal\date_recur\Plugin\Field\FieldType\DateRecurFieldItemList::processDefaultValue()
  2. 3.x src/Plugin/Field/FieldType/DateRecurFieldItemList.php \Drupal\date_recur\Plugin\Field\FieldType\DateRecurFieldItemList::processDefaultValue()
  3. 3.0.x src/Plugin/Field/FieldType/DateRecurFieldItemList.php \Drupal\date_recur\Plugin\Field\FieldType\DateRecurFieldItemList::processDefaultValue()

Processes the default value before being applied.

Defined or configured default values of a field might need some processing in order to be a valid runtime value for the field type; e.g., a date field could process the defined value of 'NOW' to a valid date.

Parameters

array $default_value: The unprocessed default value defined for the field, as a numerically indexed array of items, each item being an array of property/value pairs.

\Drupal\Core\Entity\FieldableEntityInterface $entity: The entity for which the default value is generated.

\Drupal\Core\Field\FieldDefinitionInterface $definition: The definition of the field.

Return value

array The return default value for the field.

Overrides DateRangeFieldItemList::processDefaultValue

File

src/Plugin/Field/FieldType/DateRecurFieldItemList.php, line 162

Class

DateRecurFieldItemList
Recurring date field item list.

Namespace

Drupal\date_recur\Plugin\Field\FieldType

Code

public static function processDefaultValue($default_value, FieldableEntityInterface $entity, FieldDefinitionInterface $definition) : array {
  assert(is_array($default_value));
  $defaultDateTimeZone = $default_value[0]['default_date_time_zone'] ?? NULL;
  $defaultValue = FieldItemList::processDefaultValue($default_value, $entity, $definition);
  $defaultValues = [
    [],
  ];
  $hasDefaultStartDateType = !empty($defaultValue[0]['default_date_type']);
  $hasDefaultEndDateType = !empty($defaultValue[0]['default_end_date_type']);
  if (!empty($defaultDateTimeZone) && ($hasDefaultStartDateType || $hasDefaultEndDateType)) {
    $storageFormat = $definition
      ->getSetting('datetime_type') == DateRecurItem::DATETIME_TYPE_DATE ? DateRecurItem::DATE_STORAGE_FORMAT : DateRecurItem::DATETIME_STORAGE_FORMAT;

    // Instruct 'value' and 'end_value' to convert from the localised time
    // zone to UTC.
    $formatSettings = [
      'timezone' => DateTimeItemInterface::STORAGE_TIMEZONE,
    ];
    if ($hasDefaultStartDateType) {
      $start_date = new DrupalDateTime($defaultValue[0]['default_date'], $defaultDateTimeZone);
      $start_value = $start_date
        ->format($storageFormat, $formatSettings);
      $defaultValues[0]['value'] = $start_value;
      $defaultValues[0]['start_date'] = $start_date;
    }
    if ($hasDefaultEndDateType) {
      $end_date = new DrupalDateTime($defaultValue[0]['default_end_date'], $defaultDateTimeZone);
      $end_value = $end_date
        ->format($storageFormat, $formatSettings);
      $defaultValues[0]['end_value'] = $end_value;
      $defaultValues[0]['end_date'] = $end_date;
    }
    $defaultValue = $defaultValues;
  }
  $rrule = $default_value[0]['default_rrule'] ?? NULL;
  if (!empty($rrule)) {
    $defaultValue[0]['rrule'] = $rrule;
  }
  $defaultTimeZone = $default_value[0]['default_time_zone'] ?? NULL;
  if (!empty($defaultTimeZone)) {
    $defaultValue[0]['timezone'] = $defaultTimeZone;
  }
  else {
    $timeZone = \date_default_timezone_get();
    if (empty($timeZone)) {
      throw new \Exception('Something went wrong. User has no time zone.');
    }
    $defaultValue[0]['timezone'] = $timeZone;
  }
  unset($defaultValue[0]['default_time_zone']);
  unset($defaultValue[0]['default_rrule']);
  return $defaultValue;
}