You are here

function availability_calendar_calendar_entity_property_filtered_availability_get in Availability Calendars 7.5

Entity property getter callback for the 'filtered availability' property.

The filtered availability equals the availability but represented in a format optimised for the search API.

Parameters

object $entity: param array $options param string $property_name param string $entity_type param array $property_info

Return value

array|null

Throws

\Exception

1 string reference to 'availability_calendar_calendar_entity_property_filtered_availability_get'
availability_calendar_entity_property_info in ./availability_calendar.entity.inc
Implements hook_entity_property_info().

File

./availability_calendar.entity.inc, line 178
Contains Entity API and Search API hooks and callbacks.

Code

function availability_calendar_calendar_entity_property_filtered_availability_get($entity) {
  module_load_include('inc', 'availability_calendar');
  $cid = $entity->cid;
  $from = new DateTime();
  $to = new DateTime();
  $months_to_index = variable_get('availability_calendar_months_to_index', 13);
  $to
    ->add(new DateInterval("P{$months_to_index}M"));
  $default_state = availability_calendar_get_field_setting('default_state');
  if ($default_state === NULL) {

    // We could use info from the field filter, but as we have no idea of that
    // context, we just walk through all fields. Performance hit should be
    // minimal in "normal" set-ups.
    $field = availability_calendar_get_referring_field($cid);
    if (!empty($field)) {
      $field_info = field_info_field($field);
      $default_state = $field_info['settings']['default_state'];
    }
  }
  $availability = availability_calendar_get_availability($cid, $from, $to, $default_state);
  $non_available_states = availability_calendar_get_states(FALSE);
  $result = array();
  foreach ($availability as $date => $sid) {
    if (array_key_exists($sid, $non_available_states)) {
      $timestamp = new DateTime($date);
      $timestamp = (int) $timestamp
        ->format('U');
      $result[] = $timestamp;
    }
  }
  return $result;
}