You are here

function partial_date_field_formatter_view in Partial Date 7

Implements hook_field_formatter_view().

This handles any text override options before passing the values onto the partial_date_render() or partial_date_render_range().

File

./partial_date.module, line 447
Defines a date element that allows for any combination of date granularity settings.

Code

function partial_date_field_formatter_view($object_type, $object, $field, $instance, $langcode, $items, $display) {
  $has_range = strpos($field['type'], 'range');
  $widget_settings = $instance['widget']['settings'];
  $element = array();
  foreach ($items as $delta => $item) {
    $override = FALSE;
    if (!is_array($item)) {
      continue;
    }
    $item += array(
      'txt_short' => NULL,
      'txt_long' => NULL,
      'check_approximate' => 0,
    );
    switch ($display['settings']['use_override']) {
      case 'short':
        if (strlen($item['txt_short'])) {
          $override = $item['txt_short'];
        }
        break;
      case 'long':
        if (strlen($item['txt_long'])) {
          $override = $item['txt_long'];
        }
        break;
      case 'long_short':
        if (strlen($item['txt_long'])) {
          $override = $item['txt_long'];
        }
        elseif (strlen($item['txt_short'])) {
          $override = $item['txt_short'];
        }
      case 'short_long':
        if (strlen($item['txt_short'])) {
          $override = $item['txt_short'];
        }
        elseif (strlen($item['txt_long'])) {
          $override = $item['txt_long'];
        }
        break;
    }
    $output = FALSE;
    $to = $from = FALSE;

    // The additonal "Approximate only" checkbox.
    $display['settings']['is_approximate'] = FALSE;
    if (!empty($widget_settings['theme_overrides']['check_approximate'])) {
      $display['settings']['is_approximate'] = !empty($item['check_approximate']);
    }
    if (isset($item['from'])) {
      $from = partial_date_field_widget_reduce_date_components($item['from'], TRUE);
    }
    if (isset($item['to'])) {
      $to = partial_date_field_widget_reduce_date_components($item['to'], FALSE);
    }
    $rendered_date = '';
    if ($to && $from) {
      $rendered_date = partial_date_render_range($from, $to, $display['settings']);
    }
    elseif ($to xor $from) {
      $rendered_date = partial_date_render($from ? $from : $to, $display['settings']);
    }
    unset($display['settings']['is_approximate']);
    $output = $override !== FALSE ? check_plain($override) : $rendered_date;
    if ($output) {
      $element[$delta] = array(
        '#theme' => 'partial_date_markup',
        '#markup' => $output,
        '#rendered_date' => $rendered_date,
        '#dates' => array(
          'from' => $from,
          'to' => $to,
        ),
        '#item' => $item,
        '#entity_type' => $object_type,
        '#entity' => $object,
        '#field' => $field,
        '#instance' => $instance,
        '#langcode' => $langcode,
        '#display' => $display,
      );
    }
  }
  return $element;
}