You are here

function oa_events_field_formatter_view in Open Atrium Events 7.2

Implements hook_field_formatter_view().

File

./oa_events.module, line 175
Code for the OA Events feature.

Code

function oa_events_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();
  if ($display['type'] == 'oa_events_addthis' && variable_get('oa_events_addthis', FALSE)) {
    if (isset($entity->panelizer_view_mode) && $entity->panelizer_view_mode == 'featured') {
      $element[0]['#markup'] = '';
    }
    else {
      $element[0]['#markup'] = oa_events_field_add_to_calendar_markup($entity->nid, $items, t('Add to Calendar'));
    }
  }
  elseif ($display['type'] == 'oa_events_date_formatter') {
    $event_info = oa_events_find_next_event($items);
    $event = $event_info['event'];

    // Create Date objects from item values.
    $timezone_object = date_default_timezone_object();
    $start_date = new DateObject($event['value'], $event['timezone_db'], DATE_FORMAT_UNIX);
    $start_date
      ->setTimezone($timezone_object);
    $end_date = new DateObject($event['value2'], $event['timezone_db'], DATE_FORMAT_UNIX);
    $end_date
      ->setTimezone($timezone_object);

    // Create an array of month / day information for ease of use.
    $dates = array(
      'start' => array(
        'day' => date_format_date($start_date, 'custom', 'd'),
        'month' => date_format_date($start_date, 'custom', 'M'),
      ),
      'end' => array(
        'day' => date_format_date($end_date, 'custom', 'd'),
        'month' => date_format_date($end_date, 'custom', 'M'),
      ),
    );

    // For now always use the start date. We may add multi-day event to the
    // widget at some point in the future.
    $day = $dates['start']['day'];
    $month = $dates['start']['month'];
    $element[0] = array(
      '#markup' => theme('oa_event_date', array(
        'month' => $month,
        'day' => $day,
      )),
    );
  }
  elseif ($display['type'] == 'oa_events_upcoming_date') {
    $event_info = oa_events_find_next_event($items);
    $event = $event_info['event'];

    // Create Date objects from item values.
    $timezone_object = date_default_timezone_object();
    $start_date = new DateObject($event['value'], $event['timezone_db'], DATE_FORMAT_UNIX);
    $start_date
      ->setTimezone($timezone_object);
    $end_date = new DateObject($event['value2'], $event['timezone_db'], DATE_FORMAT_UNIX);
    $end_date
      ->setTimezone($timezone_object);
    $date_formatted = '';
    $time_formatted = '';
    $rrule = '';
    $is_all_day = date_all_day_field($field, $instance, $start_date, $end_date);
    $date_format = variable_get('oa_events_date2_format', OA_EVENTS_DATE2_FORMAT);
    $time_format = variable_get('oa_events_time_format', OA_EVENTS_TIME_FORMAT);

    // Create an array of time / date information for ease of use.
    $dates = array(
      'start' => array(
        'time' => date_format_date($start_date, 'custom', $time_format),
        'date' => date_format_date($start_date, 'custom', $date_format),
      ),
      'end' => array(
        'time' => date_format_date($end_date, 'custom', $time_format),
        'date' => date_format_date($end_date, 'custom', $date_format),
      ),
    );

    // Format date.
    if ($dates['start']['date'] == $dates['end']['date']) {
      $date_formatted = $dates['start']['date'];
    }
    else {
      $date_formatted = $dates['start']['date'] . ' - ' . $dates['end']['date'];
    }

    // Format time.
    if ($is_all_day) {
      $time_formatted = theme('date_all_day_label');
    }
    elseif ($dates['start']['time'] == $dates['end']['time']) {
      $time_formatted = $dates['start']['time'];
    }
    else {
      $time_formatted = $dates['start']['time'] . ' - ' . $dates['end']['time'];
    }

    // Format rrule.
    if (isset($event['rrule'])) {
      $rrule = date_repeat_rrule_description($event['rrule']);
    }

    // Theme the result.
    $element[0] = array(
      '#markup' => theme('oa_event_next_date', array(
        'date' => $date_formatted,
        'time' => $time_formatted,
        'rrule' => $rrule,
      )),
    );
  }
  return $element;
}