You are here

function theme_date_display_combination in Date 7

Same name and namespace in other branches
  1. 8 date.theme \theme_date_display_combination()
  2. 5.2 date/date.theme \theme_date_display_combination()
  3. 5 date.module \theme_date_display_combination()
  4. 6.2 date/date.theme \theme_date_display_combination()
  5. 6 date/date.theme \theme_date_display_combination()
  6. 7.3 date.theme \theme_date_display_combination()
  7. 7.2 date.theme \theme_date_display_combination()

Theme from/to date combination in the view.

$node->date_id If set, this will show only an individual date on a field with multiple dates. The value should be a string that contains the following values, separated with periods:

  • module name of the module adding the item
  • node nid
  • field name
  • delta value of the field to be displayed
  • other information the module's custom theme might need

Used by the calendar module and available for other uses. example: 'date.217.field_date.3.test'

$node->date_repeat_show If true, tells the theme to show all the computed values of a repeating date. If not true or not set, only the start date and the repeat rule will be displayed.

$dates['format'] - the format string used on these dates $dates['value']['local']['object'] - the local date object for the From date $dates['value2']['local']['object'] - the local date object for the To date $dates['value']['local']['datetime'] - the datetime value of the From date database (GMT) value $dates['value2']['local']['datetime'] - the datetime value of the To date database (GMT) value $dates['value']['formatted'] = formatted From date, i.e. 'February 15, 2007 2:00 pm'; $dates['value']['formatted_date'] - only the date part of the formatted From date $dates['value']['formatted_time'] - only the time part of the formatted From date $dates['value2']['formatted'] = formatted To date, i.e. 'February 15, 2007 6:00 pm'; $dates['value2']['formatted_date'] - only the date part of the formatted To date $dates['value2']['formatted_time'] - only the time part of the formatted To date

1 theme call to theme_date_display_combination()
date_field_formatter_view in ./date.field.inc
Implements hook_field_formatter_view().

File

./date.theme, line 45
Theme functions.

Code

function theme_date_display_combination($vars) {
  static $repeating_ids = array();
  $entity_type = $vars['entity_type'];
  $entity = $vars['entity'];
  $field = $vars['field'];
  $instance = $vars['instance'];
  $langcode = $vars['langcode'];
  $item = $vars['item'];
  $delta = $vars['delta'];
  $display = $vars['display'];
  $field_name = $field['field_name'];
  $formatter = $display['type'];
  $options = $display['settings'];
  $dates = $vars['dates'];
  $output = '';

  // If date_id is set for this field and the delta doesn't match, don't display it.
  if (!empty($node->date_id)) {
    foreach ((array) $node->date_id as $key => $id) {
      list($module, $nid, $field_name, $item_delta, $other) = explode('.', $id);
      if ($field_name == $field['field_name'] && isset($delta) && $item_delta != $delta) {
        return $output;
      }
    }
  }

  // Check the formatter settings to see if the repeat rule should be
  // displayed. Show it only with the first multiple value date.
  list($id) = entity_extract_ids($entity_type, $entity);
  if (!in_array($id, $repeating_ids) && module_exists('date_repeat') && !empty($item['rrule']) && $options['show_repeat_rule'] == 'show') {
    module_load_include('inc', 'date', 'date_repeat');
    $repeat_vars = array(
      'field' => $field,
      'item' => $item,
      'entity_type' => $entity_type,
      'entity' => $entity,
    );
    $output .= theme('date_repeat_display', $repeat_vars);
    $repeating_ids[] = $id;
  }

  // If this is a full node or a pseudo node created by grouping
  // multiple values, see exactly which values are supposed to be visible.
  if (isset($entity->{$field_name})) {
    $entity = date_prepare_entity($formatter, $entity_type, $entity, $field, $instance, $langcode, $item, $display);

    // Did the current value get removed by formatter settings?
    if (empty($entity->{$field_name}[$langcode][$delta])) {
      return $output;
    }

    // Adjust the $element values to match the changes.
    $element['#entity'] = $entity;
  }
  switch ($options['fromto']) {
    case 'value':
      $date1 = $dates['value']['formatted'];
      $date2 = $date1;
      break;
    case 'value2':
      $date2 = $dates['value2']['formatted'];
      $date1 = $date2;
      break;
    default:
      $date1 = $dates['value']['formatted'];
      $date2 = $dates['value2']['formatted'];
      break;
  }

  // Pull the timezone, if any, out of the formatted result and tack it
  // back on at the end, if it is in the current formatted date.
  $timezone = $dates['value']['formatted_timezone'];
  if ($timezone) {
    $timezone = ' ' . $timezone;
  }
  $date1 = str_replace($timezone, '', $date1);
  $date2 = str_replace($timezone, '', $date2);

  // No date values, display nothing.
  if (empty($date1) && empty($date2)) {
    $output .= '';
  }
  elseif ($date1 == $date2 || empty($date2)) {
    $output .= theme('date_display_single', array(
      'date' => $date1,
      'timezone' => $timezone,
    ));
  }
  elseif (date_has_time($field['settings']['granularity']) && $dates['value']['formatted_date'] == $dates['value2']['formatted_date']) {

    // Replace the original time with the from/to time in the formatted start date.
    // Make sure that parentheses or brackets wrapping the time will be retained in the
    // final result.
    $time1 = preg_replace('`^([\\(\\[])`', '', $dates['value']['formatted_time']);
    $time1 = preg_replace('([\\)\\]]$)', '', $time1);
    $time2 = preg_replace('`^([\\(\\[])`', '', $dates['value2']['formatted_time']);
    $time2 = preg_replace('([\\)\\]]$)', '', $time2);
    $time = theme('date_display_range', array(
      'date1' => $time1,
      'date2' => $time2,
    ));
    $replaced = str_replace($time1, $time, $date1);
    $output .= theme('date_display_single', array(
      'date' => $replaced,
      'timezone' => $timezone,
    ));
  }
  else {
    $output .= theme('date_display_range', array(
      'date1' => $date1,
      'date2' => $date2,
      'timezone' => $timezone,
    ));
  }
  return $output;
}