You are here

function date_feeds_set_target in Feeds 7.2

Same name and namespace in other branches
  1. 6 mappers/date.inc \date_feeds_set_target()
  2. 7 mappers/date.inc \date_feeds_set_target()

Callback for setting date values.

1 string reference to 'date_feeds_set_target'
date_feeds_processor_targets in mappers/date.inc
Implements hook_feeds_processor_targets().

File

mappers/date.inc, line 57
On behalf implementation of Feeds mapping API for date.module.

Code

function date_feeds_set_target(FeedsSource $source, $entity, $target, array $values, array $mapping) {
  $language = $mapping['language'];
  list($target, $sub_field) = explode(':', $target, 2);
  $value_key = $sub_field === 'start' ? 'value' : 'value2';
  $offset_key = $sub_field === 'start' ? 'offset' : 'offset2';
  $field = isset($entity->{$target}) ? $entity->{$target} : array(
    $language => array(),
  );
  $info = field_info_field($target);
  $format = date_type_format($info['type']);
  $db_tz = new DateTimeZone(date_get_timezone_db($info['settings']['tz_handling']));
  $default_tz = new DateTimeZone(_date_feeds_get_default_timezone($mapping));
  $delta = 0;
  foreach ($values as $value) {
    $value = _date_feeds_get_date_object($value, $default_tz);
    if (!$value || !empty($value->errors)) {
      $field[$language][$delta][$value_key] = NULL;
    }
    else {
      if (!isset($field[$language][$delta]['timezone'])) {
        $timezone = $value
          ->getTimezone()
          ->getName();
        if ($timezone == 'Z') {

          // PHP < 5.5.10 doesn't know about the Zulu time zone (which equals
          // the UTC time zone). Set timezone to "UTC".
          $timezone = 'UTC';
        }
        $field[$language][$delta]['timezone'] = $timezone;
      }
      $value
        ->setTimezone($db_tz);
      $field[$language][$delta][$value_key] = $value
        ->format($format, TRUE);
      $field[$language][$delta][$offset_key] = $value
        ->getOffset();

      // Ensure that both value keys always exist to prevent php notices in
      // date_field_validate().
      if (!array_key_exists('value', $field[$language][$delta])) {
        $field[$language][$delta]['value'] = NULL;
      }
      if (!array_key_exists('value2', $field[$language][$delta])) {
        $field[$language][$delta]['value2'] = NULL;
      }
    }
    $delta++;
  }
  $entity->{$target} = $field;
}