You are here

function rooms_availability_reference_field_formatter_view in Rooms - Drupal Booking for Hotels, B&Bs and Vacation Rentals 7

Implements hook_field_formatter_view().

@todo parametrize date range

File

modules/rooms_availability_reference/rooms_availability_reference.module, line 86
Defines a field type for referencing availability information

Code

function rooms_availability_reference_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $result = array();
  $element = array();
  $js_settings = array();
  switch ($display['type']) {
    case 'rooms_availability_reference_default':
      if ($field['type'] == 'entityreference' && $field['settings']['target_type'] != 'rooms_unit') {
        return $element;
      }
      rooms_fullcalendar_loaded();

      // Full day events on calendar.
      if (variable_get('rooms_calendar_events_view', '0') == '1') {
        drupal_add_js(drupal_get_path('module', 'rooms_availability_reference') . '/js/rooms_availability_reference_full_day.js');
      }
      else {
        drupal_add_js(drupal_get_path('module', 'rooms_availability_reference') . '/js/rooms_availability_reference.js');
      }
      drupal_add_css(drupal_get_path('module', 'rooms_availability') . '/css/fullcalendar.theme.css');
      drupal_add_css(drupal_get_path('module', 'rooms_availability_reference') . '/css/rooms_availability_reference_calendar.css');
      $unit_names = array();
      $unit_ids = array();
      $id = drupal_html_id($field['field_name'] . '-availability-formatter');
      foreach ($items as $delta => $item) {
        if ($field['type'] == 'entityreference') {
          if (empty($item['access'])) {
            continue;
          }
          $unit = $item['entity'];
        }
        else {
          $unit = rooms_unit_load($item['unit_id']);
        }
        if ($unit) {
          $unit_names[] = $unit->name;
          $unit_ids[] = $unit->unit_id;
        }
      }
      if (!empty($unit_ids)) {
        $result[] = array(
          '#prefix' => '<div id="' . $id . '" class="availability-title">',
          '#markup' => '<h2>' . implode(', ', $unit_names) . '</h2>',
          '#suffix' => '</div>',
        );

        // Inject settings in javascript that we will use.
        $js_settings[$id] = array(
          'unitID' => $unit_ids,
          'style' => ROOMS_AVAILABILITY_GENERIC_STYLE,
          'firstDay' => intval(variable_get('date_first_day', 0)),
        );
      }
      break;
  }
  if (!empty($result)) {
    $element[] = array(
      '#theme' => 'rooms_availability_field_calendar',
      'calendar' => $result,
      '#attached' => array(
        'js' => array(
          array(
            'data' => array(
              'roomsAvailabilityRef' => $js_settings,
            ),
            'type' => 'setting',
          ),
        ),
      ),
    );
  }
  return $element;
}