You are here

function date_ap_style_field_formatter_view in AP Style Date 7

Implements hook_field_formatter_view().

File

./date_ap_style.module, line 107
Formats dates and times to use "AP" Style.

Code

function date_ap_style_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();
  $settings = $display['settings']['date_ap_style_output'];
  switch ($display['type']) {
    case 'date_ap_style':
      foreach ($items as $delta => $item) {
        $timezone = date_get_timezone($field['settings']['tz_handling'], isset($item['timezone']) ? $item['timezone'] : date_default_timezone());
        $value = date_local_date($item, $timezone, $field, $instance, $part = 'value');
        $value_local = date_format_date($value, $type = 'custom', $format = 'Y-m-d H:i:s');
        $value_all_day = $value;
        $value_all_day_end = $value;
        $value = date_ap_style_ap_date_string($value_local, $settings);
        $element[$delta] = array(
          '#markup' => $value,
        );
        if ($settings['show_time']) {
          $value_time = date_ap_style_time_string($value_local, $settings);
          if ($settings['date_time']) {
            $element[$delta] = array(
              '#markup' => $value . ' ' . $value_time,
            );
          }
          else {
            $element[$delta] = array(
              '#markup' => $value_time . ' ' . $value,
            );
          }
        }
        if (isset($item['value2'])) {
          $value2 = date_local_date($item, $timezone, $field, $instance, $part = 'value2');
          $value_all_day_end = $value2;
          $value2_local = date_format_date($value2, $type = 'custom', $format = 'Y-m-d H:i:s');
          $value2 = date_ap_style_ap_date_string($value2_local, $settings);
          $value2_time = date_ap_style_time_string($value2_local, $settings);
          if ($settings['show_time']) {
            if ($value == $value2) {
              if ($settings['date_time']) {

                // If the start and end time are the same time when the date is
                // the same, no need to show the same time twice. This
                // condition shows the time AFTER the date.
                if ($value_time == $value2_time) {
                  $element[$delta] = array(
                    '#markup' => $value . ' ' . $value_time,
                  );
                }
                else {
                  $element[$delta] = array(
                    '#markup' => $value . ' ' . $value_time . ' to ' . $value2_time,
                  );
                }
              }
              elseif ($value_time == $value2_time) {
                $element[$delta] = array(
                  '#markup' => $value_time . ' ' . $value,
                );
              }
              else {
                $element[$delta] = array(
                  '#markup' => $value_time . ' to ' . $value2_time . ' ' . $value,
                );
              }
            }
            elseif ($settings['date_time']) {
              $element[$delta] = array(
                '#markup' => $value . ' ' . $value_time . ' to ' . $value2 . ' ' . $value2_time,
              );
            }
            else {
              $element[$delta] = array(
                '#markup' => $value_time . ' ' . $value . ' to ' . $value2_time . ' ' . $value2,
              );
            }
          }
        }
        if ($settings['use_all_day']) {

          // Use Date API to recognize All Day items.
          $all_day = date_field_all_day($field, $instance, $value_all_day, $value_all_day_end);
          if ($all_day) {
            if ($settings['date_time']) {
              $element[$delta] = array(
                '#markup' => t('@value All Day', array(
                  '@value' => $value,
                )),
              );
            }
            else {
              $element[$delta] = array(
                '#markup' => t('All Day @value', array(
                  '@value' => $value,
                )),
              );
            }
          }
        }
      }
      break;
  }
  return $element;
}